[英]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()
方法
请参阅此链接进行扩展讨论
问题是您正在尝试写入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);
问题是您已打开文件并在写入文件的同时从同一文件读取。 但是你应该做的是
所以你的代码应该像
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.