2

ファイルを文字列に読み込み、その文字列を新しいファイルに書き直そうとしていますが、現在の文字が書き換えたい特殊文字の 1 つであるかどうか、小さなチェックがあります。デバッグしましたが、コードは正常に動作しているように見えますが、出力ファイルが空です..何かが足りないと思います...しかし、何ですか?

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呼び出すか、ステートメントfile.Closeで StreamWriter をインスタンス化できる場合はどうなりますか。using私の推測では、バッファをフラッシュする必要があるため、空です

于 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 に答える