【发布时间】:2012-08-21 23:17:26
【问题描述】:
我有这段代码可以比较两个文本文件并将差异写入日志文件,但由于某种原因,log.txt 文件有时是空白的,即使在测试某些以 * 开头的行时,这些也不总是写入完成写作后我是否必须保存文本文件,尽管这不能解释为什么有时它会起作用,任何帮助都会很棒
private void compare()
{
string FilePath = @"c:\snapshot\1.txt";
string Filepath2 = @"c:\snapshot\2.txt";
int counter = 0;
string line;
string line2;
var dir = "c:\\snapshot\\log.txt";
using (FileStream fs = File.Create(dir))
{
fs.Dispose();
}
StreamWriter dest = new StreamWriter(dir);
if (File.Exists(FilePath) & File.Exists(Filepath2))
{
// Read the file and display it line by line.
using (var file = File.OpenText(FilePath))
using (var file2 = File.OpenText(Filepath2))
{
while (((line = file.ReadLine()) != null & (line2 = file2.ReadLine()) != null))
{
if (line.Contains("*"))
{
dest.WriteLine(line2);
}
else if (!line.Contains(line2))
{
dest.WriteLine(line2);
}
counter++;
}
}
}
dest.Close();
}
【问题讨论】:
-
粗略一瞥,在我看来,您的行可能会不同步,因为您正在读取具有不同数据的两个文件。如果文件不大,您可能希望将它们加载到列表中并进行更正式的比较。
-
你的代码有点乱,如果你使用“using”,你不需要调用dispose,为什么你不使用StreamWriter的“using”,为什么使用FileStream和做什么都没有...
-
顺便说一句,
using语句的全部要点,它会为你调用 Dispose,所以在using块中调用 Dispose,充其量是不需要的。 -
使用
&&,而不是&。单个&是按位算术,最终可能会做你想做的事,但通常在这里你的意思是&&。 -
我是 C# 新手,编程只是自学并获得论坛提示,因此在使用“使用”时不需要使用 dispose 来添加其他内容
标签: c# filewriter