Управление текстовым файлом в C #

2

в порядке, поэтому у меня есть текстовый файл с примером ниже

line1with some random stuff here
line 2 with something very completely different
line3 has some other neat stuff
line4 is the last line in the textfile

Мне нужно получить этот текстовый файл, удалить одну строку и оставить тактику REST файла. и поэтому, если бы я хотел удалить строку 2, id хочет получить результат следующим образом:

line1with some random stuff here
line3 has some other neat stuff
line4 is the last line in the textfile

Обратите внимание, что я не хочу оставлять пробел между строками.

~ примеры кода, пожалуйста! и даже если это невозможно, любая помощь будет оценена!:)

  • 0
    удалите одну строку и оставьте файл в такте: это противоречиво
  • 4
    Вы честно не могли понять, что он имел в виду, не играя семантику?
Показать ещё 2 комментария
Теги:
file
text

3 ответа

5
Лучший ответ

Самый простой способ сделать это:

string filePath = ...
List<string> lines = new List<string>(File.ReadAllLines(filePath ));
lines.RemoveAt(2);  //Remove the third line; the index is 0 based
File.WriteAllLines(filePath, lines.ToArray());

Обратите внимание, что это будет очень неэффективно для больших файлов.

2

Предполагая, что у вас есть метод lineIsGood, который определяет, была ли данная строка одной, которую вы хотели сохранить (в вашем случае вы можете просто проверить, не была ли она второй линией, но я предполагаю, что вы в конце концов, нужны более надежные критерии):

Queue<string> stringQueue = new Queue<string();
string tempLine = "";

StreamReader reader = new StreamReader(inputFileName);
do
{
     tempLine = reader.ReadLine();
     if (lineIsGood(tempLine))
     {
          stringQueue.Enqueue(tempLine);
     }
}   
while(reader.Peek() != -1);
reader.Close();

StreamWriter writer = new StreamWriter(inputFileName);     
do
{
    tempLine = (string) stringQueue.Dequeue();
    writer.WriteLine(tempLine);        
}
while (stringQueue.Count != 0);
writer.Close();
  • 0
    Это добавит строки без очистки файла. Вам нужно записать во временный файл, а затем заменить его исходным файлом.
  • 0
    Работает ли на самом деле чтение и запись одного файла? Я бы не ожидал этого.
Показать ещё 3 комментария
0

возможно использовать поток StreamWriter.Write(char [], int index, int count).

Преимущество заключается в возможности начать запись в точке в файле. Итак, все, что вам нужно сделать, это читать в строках и подсчитывать символы, которые вы передавали, читать в строке, которую хотите изменить, получить ее длину, а затем использовать ее так:

StreamWriter.Write(NewLine.CharArray(), CharCount, LineLength)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню