繁体   English   中英

如何覆盖同一文本文件中的文本

[英]How to overwrite text in same text file

我正在努力使用控制台应用程序覆盖文本文件并进行一些更改。 在这里,我正在逐行读取文件。 谁能帮我。

StreamReader sr = new StreamReader(@"C:\abc.txt");
string line;
line = sr.ReadLine();

while (line != null)
{
  if (line.StartsWith("<"))
  {
    if (line.IndexOf('{') == 29)
    {
      string s = line;
      int start = s.IndexOf("{");
      int end = s.IndexOf("}");
      string result = s.Substring(start+1, end - start - 1);
      Guid g= Guid.NewGuid();
      line = line.Replace(result, g.ToString());
      File.WriteAllLines(@"C:\abc.txt", line );
    }
  }
  Console.WriteLine(line);

  line = sr.ReadLine();
}
//close the file
sr.Close();
Console.ReadLine();

在这里,我得到错误文件已经由另一个进程打开

任何人都请帮助我。 主要任务是通过修改覆盖相同的texfile

您只需要一个流,就可以同时打开它进行读写。

FileStream fileStream = new FileStream(
      @"c:\words.txt", FileMode.OpenOrCreate, 
      FileAccess.ReadWrite, FileShare.None);

现在您可以使用fileStream.Read() and fileStream.Write()方法

请参阅此链接进行扩展讨论

如何在C#中读取和写入文件

问题是您正在尝试写入StreamReader使用的文件。 你必须将其关闭或-更好-使用using语句来处置其/关闭它甚至错误。

using(StreamReader sr = new StreamReader(@"C:\abc.txt"))
{
    // ...
}
File.WriteAllLines(...);

File.WriteAllLines还将所有行不仅写入当前行,而且在循环中这样做毫无意义。

我可以建议您使用其他方法来读取文本文件的行吗? 您可以使用File.ReadAllLines将所有行读入string[]File.ReadLines ,其工作方式类似于StreamReader通过延迟读取所有行。

这是一个版本相同的版本,但是使用(更易读?)LINQ查询:

var lines = File.ReadLines(@"C:\abc.txt")
    .Where(l => l.StartsWith("<") && l.IndexOf('{') == 29)
    .Select(l => 
    {
        int start = l.IndexOf("{");
        int end = l.IndexOf("}", start);
        string result = l.Substring(start + 1, end - start - 1);
        Guid g = Guid.NewGuid();
        return l.Replace(result, g.ToString());
    }).ToList();
File.WriteAllLines(@"C:\abc.txt", lines);

问题是您已打开文件并在写入文件的同时从同一文件读取。 但是你应该做的是

  1. 从文件中读取更改
  2. 关闭档案
  3. 将内容写回文件

所以你的代码应该像

List<string> myAppendedList = new List<string>();
using (StreamReader sr = new StreamReader(@"C:\abc.txt"))

{
    string line;
    line = sr.ReadLine();

    while (line != null)
    {
        if (line.StartsWith("<"))
        {
            if (line.IndexOf('{') == 29)
            {
                string s = line;
                int start = s.IndexOf("{");
                int end = s.IndexOf("}");
                string result = s.Substring(start + 1, end - start - 1);
                Guid g = Guid.NewGuid();
                line = line.Replace(result, g.ToString());
                myAppendedList.Add(line);

            }
        }
        Console.WriteLine(line);

        line = sr.ReadLine();
    }
}

if(myAppendedList.Count > 0 )
    File.WriteAllLines(@"C:\abc.txt", myAppendedList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM