2

我正在尝试将文件读入字符串并将该字符串重写为新文件,但是如果当前字符是我要重写的特殊字符之一,则需要进行一个小检查。我已经调试过了,代码似乎工作正常,但输出文件是空的..我想我错过了一些东西......但是什么?

StreamWriter file = new StreamWriter(newname, true);

char current;
int j;
string CyrAlph = "йцукен";
string LatAlph = "ysuken";
string text = File.ReadAllText(filename);

for (int i = 0; i < text.Length; i++)
{
    if (CyrAlph.IndexOf(text[i]) != -1)
    {
        j = CyrAlph.IndexOf(text[i]);
        current = LatAlph[j];

    }
    else current = text[i];

    file.Write(current);
}
4

3 回答 3

1

如果您在实例化file.AutoFlush = true之后设置或在编写所有内容结束时调用,或者您可以在语句中实例化您的 StreamWriter,会发生什么情况。我的猜测是它是空的,因为缓冲区需要刷新StreamWriterfile.Closeusing

于 2013-02-05T20:54:08.963 回答
0

StreamWriter实现IDisposable。使用后您“必须”Dispose使用它。为此,请使用using语句。using这将自动刷新并关闭主体末尾的流。

using(StreamWriter file = new StreamWriter(newname,true))
{
    char current;
    int j;
    string CyrAlph="йцукен";
    string LatAlph = "ysuken";
    string text = File.ReadAllText(filename);

    for (int i = 0; i < text.Length; i++)
    {
        if (CyrAlph.IndexOf(text[i]) != -1)
        {
            j=CyrAlph.IndexOf(text[i]);
            current = LatAlph[j];

        }
        else current=text[i];

        file.Write(current);
    }
}
于 2013-02-05T20:56:29.543 回答
0

你错过了一个流冲洗。using标准模式是围绕 StreamWriter 的分配添加一条语句。这还负责关闭文件并释放操作系统的文件句柄:

using (StreamWriter file = new StreamWriter(path, true))
{
   // Work with your file here

} // After this block, you have "disposed" of the file object.
  // That takes care of flushing the stream and releasing the file handle

与显式关闭流相比,using 语句具有额外的好处,即使在块内出现异常的情况下也能正确处理流。

于 2013-02-05T21:01:02.410 回答