C#使用streamwriter和streamreader同时改变行

时间:2017-07-06 20:15:53

标签: c#

所以我搜索了很多关于如何更改文件中的特定行的信息,所以我找到了删除行的代码。我设法编辑代码,它改变了确切的行,但是当我想改变其他行后,前一个单词重置,我不知道为什么。

这是我找到的代码:

using (StreamReader reader = new StreamReader("C:\\input")) {
using (StreamWriter writer = new StreamWriter("C:\\output")) {
    while ((line = reader.ReadLine()) != null) {
        if (String.Compare(line, line_to_delete) == 0)
            continue;

        writer.WriteLine(line);
    }
}

}

这是我编辑过的代码:

public void ChangeLineInFile(string file, string file2, string linetochange, string changedline) {
            string line = null;

            using (StreamReader reader = new StreamReader(file)) {
                using (StreamWriter writer = new StreamWriter(file2)) {
                    while ((line = reader.ReadLine()) != null) {
                        if (String.Equals(line, linetochange)) {
                            writer.WriteLine(string.Format("{0}", changedline));
                        } else {
                            writer.WriteLine(line);
                        }
                    }
                }
            }
            File.Delete(file);
            File.Move(file2, file);
            File.Delete(file2);
        }

2 个答案:

答案 0 :(得分:0)

在我看来,您的代码执行以下操作

file1->editA->file2

然后再次运行它。你有没有在开始之前将file2复制回file1,或者你刚刚做了

file1->editB->file2

第一次传递后,file1仍然包含原始数据。因此,当您完成该功能时,您需要将输出文件复制到输入文件中。

答案 1 :(得分:0)

正如我刚才在评论中所解释的那样。

您可能在项目的Visual Studio中包含了源文件,即要更改的文件。

  • 当您从Visual Studio运行代码时,即使上次执行中已存在文件,它也会将该源文件复制到输出目录。
  • 不会更改Visual Studio项目中的原始文件,只会更改构建输出中包含的副本。
  • 每次执行时,您都是从项目中包含的原始文件开始, 继续使用您已更改的文件,因为此文件被覆盖。

这就是说,如果要在构建期间将文件包含为输出,或者它们是否应覆盖现有文件,则可以指定方法。单击解决方案资源管理器中的文件,然后转到属性(键盘上的F4快捷方式)。必须考虑Build ActionCopy to Output Directory