有没有人知道是否可以为我在Applications Localfolder中创建的文件设置最大文件大小(对于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
答案 0 :(得分: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的文件已满时,它将切换到另一个而不删除之前的文件,因为在搜索错误时可能需要它(如果是日志记录) ,当其他5 MB已满时,它将清除第一个并再次开始写入,因为在5 MB的错误记录后,我认为您将不再需要该数据。