Управление текстовым файлом в C # - PullRequest
2 голосов
/ 02 ноября 2009

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 02 ноября 2009

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

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 голосов
/ 02 ноября 2009

Предполагая, что у вас есть метод 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 голосов
/ 02 ноября 2009

может использовать перегрузку StreamWriter.Write (буфер char [], индекс int, число int).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...