2

アプリケーションの Localfolder (WinRT アプリ用) で作成したファイルの最大ファイル サイズを設定できるかどうかは誰にもわかりません。この時点で、次のような StorageFile を作成します。

private StorageFile m_StorageFile = null;

m_StorageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("Myfile.log",
                                                                              CreationCollisionOption.OpenIfExists);

しかし、ローカルフォルダー内のファイルの最大サイズを10MBとしましょう。したがって、大きくなると、古いエントリをクリアするか、それ自体をクリアする必要があります。

localfolder ファイルに書き込むことができる最大サイズに関する多くの回答を見つけましたが、localfolder 内のファイルの最大ファイルを設定する方法を説明する回答はありません。

アプリケーションにログインを実装しようとしているため、これが必要です。以前は、次のように web.config ファイルでこれを設定できました。

<maximumFileSize value="10MB" />

Log4Netを使用していますが、これはまだ.Netフレームワーク4.5に更新されていません。そのため、代替案を提供するこのチュートリアルに従いましたが、最大ファイルサイズについては何も見つかりませんでした。チュートリアルへのリンク

http://code.msdn.microsoft.com/windowsapps/Logging-Sample-for-Windows-0b9dffd7

4

1 に答える 1

1

@Igor がコメントとして残したものを調べた後、このコードを使用して問題の解決策を思いつきました。

IRandomAccessStream sessionRandomAccessFile1 = await this.m_StorageFile1.OpenAsync(FileAccessMode.Read);
                IRandomAccessStream sessionRandomAccessFile2 = await this.m_StorageFile2.OpenAsync(FileAccessMode.Read);

                if (sessionRandomAccessFile1.Size == 0)
                {
                    await FileIO.AppendLinesAsync(m_StorageFile1, lines);
                }
                else if (sessionRandomAccessFile1.Size < 5000000)
                {
                    if (sessionRandomAccessFile1.Size > 4999900 )
                    {
                        await m_StorageFile2.DeleteAsync();
                        AssignLocalFile();
                    }
                    await FileIO.AppendLinesAsync(m_StorageFile1, lines);

                }
                else if (sessionRandomAccessFile2.Size < 5000000)
                {
                    if (sessionRandomAccessFile1.Size > 5000000 && sessionRandomAccessFile2.Size > 4999900)
                    {
                        await m_StorageFile1.DeleteAsync();
                        AssignLocalFile();
                    }
                    await FileIO.AppendLinesAsync(m_StorageFile2, lines);

                }

メソッド assignlocalfile では、それらを削除した後に新しいファイルを作成するだけです:

 private async void AssignLocalFile()
    {
        m_StorageFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("VakantieApplicatie", CreationCollisionOption.OpenIfExists);
        m_StorageFile1 = await m_StorageFolder.CreateFileAsync(m_Name.Replace(" ", "_") + "1.log",
                                                                                CreationCollisionOption.OpenIfExists);
        m_StorageFile2 = await m_StorageFolder.CreateFileAsync(m_Name.Replace(" ", "_") + "2.log",
                                                                                CreationCollisionOption.OpenIfExists);
    }

このようにして、最大合計サイズが 10MB になり、5MB の 1 つのファイルがいっぱいになると、前のファイルを削除せずに別のファイルに切り替わります。他の 5 MB がいっぱいです。5 MB のエラー ログの後、そのデータはもう必要ないと思うので、最初のデータがクリアされ、そこに再度書き込みが開始されます。

于 2013-04-02T09:12:16.000 に答える