Удаление первой строки текстового файла в С#
В настоящее время я могу удалить последнюю строку текстового файла, используя:
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Take(lines.Length - 1).ToArray());
Хотя, как можно вместо этого удалить начало текстового файла?
Ответы
Ответ 1
Вместо lines.Take
, вы можете использовать lines.Skip
, например:
var lines = File.ReadAllLines("test.txt");
File.WriteAllLines("test.txt", lines.Skip(1).ToArray());
усекать в начале, несмотря на то, что используемая техника (читать весь текст и писать все обратно) очень неэффективна.
Об эффективном способе: неэффективность проистекает из необходимости считывать весь файл в память. Другим способом может быть поиск в потоке и копирование потока в другой выходной файл, удаление оригинала и переименование старого. Это было бы одинаково быстро и все же потребляло бы намного меньше памяти.
Усечение файла в конце намного проще. Вы можете просто найти позицию trunaction и вызвать FileStream.SetLength()
.
Ответ 2
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray());
Skip
исключает заданное количество элементов из начала последовательности. Take
исключает все, кроме заданного числа элементов, из конца последовательности.
Ответ 3
Вот альтернатива:
using (var stream = File.OpenRead("C:\\yourfile"))
{
var items = new LinkedList<string>();
using (var reader = new StreamReader(stream))
{
reader.ReadLine(); // skip one line
string line;
while ((line = reader.ReadLine()) != null)
{
//it far better to do the actual processing here
items.AddLast(line);
}
}
}
Обновление
Если вам нужен IEnumerable<string>
и вы не хотите тратить память, вы можете сделать что-то вроде этого:
public static IEnumerable<string> GetFileLines(string filename)
{
using (var stream = File.OpenRead(filename))
{
using (var reader = new StreamReader(stream))
{
reader.ReadLine(); // skip one line
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
}
static void Main(string[] args)
{
foreach (var line in GetFileLines("C:\\yourfile.txt"))
{
// do something with the line here.
}
}
Ответ 4
Удаление первой строки из текстового файла
System.IO.StreamReader file = new System.IO.StreamReader(filePath);
string data = file.ReadToEnd();
file.Close();
data = Regex.Replace(data, "<.*\n", "");
System.IO.StreamWriter file = new System.IO.StreamWriter(filePath, false);
file.Write(data);
file.Close();
Ответ 5
можно сделать в одной строке также
File.WriteAllLines(origialFilePath,File.ReadAllLines(originalFilePath).Skip(1));
Предполагая, что вы передаете свой filePath в качестве параметра функции.