c# - 设置在本地文件夹 winRT 中保存字符串的文件的最大文件大小

标签 c# logging windows-8 windows-runtime

有谁知道是否可以为我在应用程序本地文件夹(用于 WinRT 应用程序)中创建的文件设置最大文件大小。在这一点上,我制作了一个像这样的 StorageFile:

private StorageFile m_StorageFile = null;

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

但我希望本地文件夹中的文件最大大小为 10MB。因此,当它变大时,它应该清除旧条目或清除自身。

我找到了许多关于您可以写入本地文件夹文件的最大大小的答案,但没有一个描述如何为本地文件夹中的文件设置最大文件。

我需要这个,因为我正在尝试实现登录到我的应用程序,我曾经能够像这样在 web.config 文件中设置它:

<maximumFileSize value="10MB" />

使用 Log4Net 但尚未更新到 .Net framework 4.5 这就是为什么我按照本教程进行操作的原因,他们提供了替代方法但我找不到有关最大文件大小的任何信息,链接到教程

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

最佳答案

在查看@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 的文件已满时,它将切换到另一个文件而不删除前一个文件,因为当您搜索错误时可能需要它(在日志记录的情况下) ,当其他 5 MB 已满时,它将清除第一个并再次开始在那里写入,因为在 5 MB 的错误日志记录之后,我认为您将不再需要该数据。

关于c# - 设置在本地文件夹 winRT 中保存字符串的文件的最大文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15704333/

相关文章:

c# - 以数据库为存储介质在.NET中实现日志记录库

c++ - 找不到用于 DirectX 编程的 d3dcompiler_43.dll

c# - MSBuild 中出现错误 CS0840,但 VS2015 中没有错误

c# - 为什么这个 C# 转换示例不起作用?

c# - 将 LINQ 语句转换为通常的数据服务 URL

database - 无法启动 mySQL 服务器 Windows 8

xaml - 如何在 XAML、Windows 8 的 super 按钮栏中设置设置属性?

c# - C#如何实现异常重试n次?

c++ - C++ 应用程序的更丰富的日志记录/跟踪状态

logging - JVM 日志记录堆栈跟踪