1

これは機能します:

using (StreamWriter stw = new StreamWriter(Server.MapPath("\\xml\\file.xml")))
{
    stw.Write(xmlEncStr);
}

これにより、空のファイルが作成されます。

using (FileStream file = new FileStream(Server.MapPath("\\xml\\file.xml"), FileMode.CreateNew))
{
    using (StreamWriter sw = new StreamWriter(file))
    {
        sw.Write(xmlEncStr);
    }
}

FileStream コンストラクターをいじってみましたが、フラッシュを試みましたが、まだゼロバイトのファイルを取得しています。私が書いている文字列は、特殊文字を含まない単純な base64 でエンコードされた ASCII 文字列です。

最初の例を使用できることはわかっていますが、2 番目の例が機能しないのはなぜですか?

アップデート

これは Filestream/StreamWriter の問題ではなく、変数の命名の問題でした。上記のコードを修正したので、両方のバージョンが動作するようになりました。私はもともと持っていました:

StreamWriter strw = new StreamWriter(file)
4

2 に答える 2

2

コードを少し短くすることができます:

File.WriteAllText(Server.MapPath("\\xml\\file.xml"), xmlEncStr);

また、このMapPathメソッドは相対パスまたは仮想パスを受け入れ、それをサーバー上の対応する物理パスに変換します。\\xml\\file.xml上記以外です。おそらく次のようになります~/xml/file.xml

于 2010-01-21T17:54:59.460 に答える
1

再現できません。

これは ASP.NET の問題ではなく、2 番目の形式が機能するはずです ( sw==strw の場合)。

ただしFileMode.CreateNew、ファイルが既に存在する場合は失敗するため、固定ファイル名を使用し、以前の試行中に空のファイルとして作成された場合、それが症状を説明します。

しかし、@Darin Dimitrov はより良い代替手段を提供します。

于 2010-01-21T18:33:20.907 に答える