在C#中管理文本文件

时间:2009-11-02 03:02:23

标签: c# file text

好的,所以我有一个文本文件,其中包含示例内容

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 个答案:

答案 0 :(得分: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());

请注意,这对于大型文件来说效率非常低。

答案 1 :(得分: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();

答案 2 :(得分:0)

可能使用StreamWriter.Write(char [] buffer,int index,int count)重载。

它的优点是能够在文件中的某个点开始写入。因此,您需要做的就是读取行并计算您传递的字符,读取您想要更改的行,获取其长度,然后像这样使用

StreamWriter.Write(NewLine.CharArray(),CharCount,线路长度)