StreamReader无法按预期工作

时间:2011-01-11 12:26:27

标签: c# io streamreader

我编写了一个简单的实用程序,它遍历项目中的所有C#文件,并更新顶部的版权文本。

例如,文件可能如下所示;

//Copyright My Company, © 2009-2010

程序应该将文本更新为这样;

//Copyright My Company, © 2009-2010

然而,我写的代码导致了这一点;

//Copyright My Company, � 2009-2011

这是我正在使用的代码;

public bool ModifyFile(string filePath, List<string> targetText, string replacementText)
{
    if (!File.Exists(filePath)) return false;
    if (targetText == null || targetText.Count == 0) return false;
    if (string.IsNullOrEmpty(replacementText)) return false;

    string modifiedFileContent = string.Empty;
    bool hasContentChanged = false;

    //Read in the file content
    using (StreamReader reader = File.OpenText(filePath))
    {
        string file = reader.ReadToEnd();

        //Replace any target text with the replacement text
        foreach (string text in targetText)
            modifiedFileContent = file.Replace(text, replacementText);

        if (!file.Equals(modifiedFileContent))
            hasContentChanged = true;
    }

    //If we haven't modified the file, dont bother saving it
    if (!hasContentChanged) return false;

    //Write the modifications back to the file
    using (StreamWriter writer = new StreamWriter(filePath))
    {
        writer.Write(modifiedFileContent);
    }

    return true;
}

任何帮助/建议表示赞赏。谢谢!

5 个答案:

答案 0 :(得分:2)

这是一个令人头疼的问题。

我认为你应该改变这一行

using (StreamWriter writer = new StreamWriter(filePath))

使用正确的编码保存的变体(看起来像这样的重载)

using (StreamWriter writer = new StreamWriter(filePath, false, myEncoding))

要获得正确的编码,请在打开文件的位置添加此行

myEncoding = reader.CurrentEncoding;

答案 1 :(得分:1)

尝试使用

StreamWriter(string path, bool append, Encoding encoding)

new StreamWriter(filePath, false, new UTF8Encoding())

答案 2 :(得分:1)

从阅读器获取编码并在编写器中使用它。

更改了代码:

public bool ModifyFile(string filePath, List targetText, string replacementText)
{
    if (!File.Exists(filePath)) return false;
    if (targetText == null || targetText.Count == 0) return false;
    if (string.IsNullOrEmpty(replacementText)) return false;

    string modifiedFileContent = string.Empty;
    bool hasContentChanged = false;
    Encoding sourceEndocing = null;

    using (StreamReader reader = File.OpenText(filePath))
    {
        sourceEndocing = reader.CurrentEncoding;
        string file = reader.ReadToEnd();

        foreach (string text in targetText)
            modifiedFileContent = file.Replace(text, replacementText);

        if (!file.Equals(modifiedFileContent))
            hasContentChanged = true;
    }

    if (!hasContentChanged) return false;

    using (StreamWriter writer = new StreamWriter(filePath, false, sourceEndocing))
    {
        writer.Write(modifiedFileContent);
    }

    return true;
}

答案 3 :(得分:-1)

您必须指定encoding

System.Text.Encoding.UTF8应该可以做到这一点。

对它进行排序后please promise me to read this

答案 4 :(得分:-1)

我敢打赌它与文件内容的编码有关。确保使用正确的编码实例化StreamWriter。 (http://msdn.microsoft.com/en-us/library/f5f5x7kt.aspx