UWP - RandomAccessStream 在文件被修改时退出
UWP - RandomAccessStream quits when the file is modified
我正在尝试在添加新行时读取文件的内容。
为此,我准备了以下代码。
using (var inputStream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowOnlyReaders))
using (var streamReader = new StreamReader(inputStream.AsStream()))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
}
streamReader.Close();
inputStream.Dispose();
}
问题是一旦文件被修改,输入流的大小为 0 并且循环退出。
我该如何解决这个问题?
对于遇到相同问题的任何人,这似乎都有效。
重要的部分是oldsize变量。你需要有 if 子句,否则它不会工作。
using (var randAccessStream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowReadersAndWriters))
using (var inputStream = randAccessStream.AsStream())
using (var streamReader = new StreamReader(inputStream))
{
var oldsize = randAccessStream.Size;
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (oldsize != randAccessStream.Size) //Useless but seems to fix the bug
{
oldsize = randAccessStream.Size;
await Task.Delay(100);
}
}
await inputStream.FlushAsync();
streamReader.Close();
inputStream.Dispose();
randAccessStream.Dispose();
}
我正在尝试在添加新行时读取文件的内容。 为此,我准备了以下代码。
using (var inputStream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowOnlyReaders))
using (var streamReader = new StreamReader(inputStream.AsStream()))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
}
streamReader.Close();
inputStream.Dispose();
}
问题是一旦文件被修改,输入流的大小为 0 并且循环退出。
我该如何解决这个问题?
对于遇到相同问题的任何人,这似乎都有效。
重要的部分是oldsize变量。你需要有 if 子句,否则它不会工作。
using (var randAccessStream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowReadersAndWriters))
using (var inputStream = randAccessStream.AsStream())
using (var streamReader = new StreamReader(inputStream))
{
var oldsize = randAccessStream.Size;
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (oldsize != randAccessStream.Size) //Useless but seems to fix the bug
{
oldsize = randAccessStream.Size;
await Task.Delay(100);
}
}
await inputStream.FlushAsync();
streamReader.Close();
inputStream.Dispose();
randAccessStream.Dispose();
}