3

ここでクイック検索しても何も得られませんでした。そのため、WinRT アプリケーションで StreamWriter を使用するために、かなり遠回りな方法を使用し始めました。読むことはうまくいきますが、書くことは違った働きをします。私が見ているのは、書き込むファイルを選択するときに、新しいファイルを選択しても問題ないということです。期待どおりにファイルが作成されます。ファイルを上書きすることを選択した場合、ファイルはある時点まで上書きされますが、ストリームが書き込みを停止する時点で、元のファイルが大きかった場合、新しいストリームが書き込む場所を超えて古いコンテンツが存在します。

コードは次のとおりです。

public async void WriteFile(StorageFile selectedFileToSave)
{
    // At this point, selectedFileToSave is from the Save File picker so can be a enw or existing file
    StreamWriter writeStream;
    Encoding enc = new UTF8Encoding();
    Stream dotNetStream;

    dotNetStream = await selectedFileToSave.OpenStreamForWriteAsync();
    StreamWriter writeStream = new StreamWriter(dotNetStream, enc);

    // Do writing here

    // Close
    writeStream.Write(Environment.NewLine);
    await writeStream.FlushAsync();
    await dotNetStream.FlushAsync();
}

私が見逃している可能性があるものについて、誰かが手がかりを提供できますか? WinRT には多くの機能が欠けているため、これを回避する方法を実際には踏襲していません。

4

2 に答える 2

5

SetLengthまたは、を使用する前に、メソッドでストリームの長さを 0 に設定できますStreamWriter

var stream = await file.OpenStreamForWriteAsync();
stream.SetLength(0);
using (var writer = new StreamWriter(stream))
{
    writer.Write(text);
}
于 2013-11-30T10:40:59.973 に答える
1

FileIOクラスでヘルパーメソッドを使用しないのはなぜですか? あなたは呼び出すことができます:

FileIO.WriteTextAsync(selectedFileToSave, newTextContents);

本当に必要な場合はStreamWriter、最初に呼び出してファイルを切り捨てます

FileIO.WriteBytesAsync(selectedFileToSave, new byte[0]);

そして、既存のコードを続行します。

于 2013-05-08T05:03:17.240 に答える