0

クライアントの情報をログに記録するために Silverlight アプリで使用IsloatedStorageしており、ログ ファイルをクリアする関数を追加しました。ただし、私が試した2つのアプローチには問題がありました。

アプローチ 1: 使用する

IsolatedStorageFile.DeleteFile("log.log");

結果: これは失敗し、"[IsolatedStorage_DeleteFile]" エラーが返されます (その他の情報はありません)。この関数は、たとえば、テスト ファイルでは問題なく動作しますDeleteFile("test.txt")が、ログの削除は拒否します。おそらくログが使用されていると思い、それを閉じようとしました

IsolatedStorageFileStream.close()

しかし、これは別のエラー "[IsolatedStorage_StoreNotOpen]" を返します。前のコード行でメッセージが正常にログに記録されているため、開いていることがわかります。

アプローチ 2: Truncate file モードを使用してログ ファイルを再度開きます。

_storageFileStream = new IsolatedStorageFileStream(logfilename, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite, _storageFile);

MSDN によると、Truncate は、「オペレーティング システムが既存のファイルを開く必要があることを指定します。ファイルを開くと、サイズが 0 バイトになるようにファイルを切り詰める必要があります。」ただし、ログ ファイルが開かれ、空白で埋められます。ファイルサイズは同じままで、次のログ メッセージがすべてのスペースの末尾に追加されます。

4

1 に答える 1

0

閉じるのではなく、破棄することで、これを行う方法を見つけました。

IsolatedStreamWriter.Dispose();                       
IsolatedStorageFile.DeleteFile("log.log");
IsolatedStorageFileStream = new IsolatedStorageFileStream(logfilename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, _storageFile);

「切り捨て」アプローチが機能しませんでしたが、今は必要ありません。

于 2010-01-07T15:40:55.157 に答える