我正在尝试一些应该直截了当的东西,保存然后在UWP中加载文件.(通用Windows平台)然而,它并不总是有效.
功能:
public async Task<bool> WriteFile(string fileName, byte[] byteArray){
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBytesAsync(file, byteArray);
return true;
}
public async Task<IBuffer> ReadFile(string fileName){
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync(fileName);
IBuffer buffer = await FileIO.ReadBufferAsync(file);
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
来电代码:
byte[] fancyByteArray = { 0,1,2,3,4,5 };
Task<bool> t = WriteFile("Testfile", fancyByteArray);
Task<byte[]> task = ReadFile("Testfile");
IBuffer res = task.Result;
Run Code Online (Sandbox Code Playgroud)
嗯,这有时会起作用.这就是问题,因为有时它不起作用!有时文件似乎是创建或重新创建的,但没有内容.(磁盘上的大小是零字节)有时我得到一个文件不存在的错误.
它不是一个大文件,64字节,所以它不能与"大文件仍然被写入"磁盘有关.
我假设"await"的意思是"等到那些darn字节写入磁盘",但也许我错了?!也许我应该以某种方式检查事情是否已完成写入磁盘?
据我所知,我正在使用Visual Studio Community 2017,最新的一切.应用程序目标版本设置为"Windows 10 Anniversary Edition(10.0; Build 14393)".
您await在方法内部,但不等待您的实际通话.所以在写完成之前,它会尝试读取文件的内容.
相反,等待你ReadFile和WriteFile像下面.
byte[] fancyByteArray = { 0, 1, 2, 3, 4, 5 };
bool t = await WriteFile("Testfile", fancyByteArray);
byte[] task = await ReadFile("Testfile");
Run Code Online (Sandbox Code Playgroud)
而你WriteFile并ReadFile应该像下面
public async Task<bool> WriteFile(string fileName, byte[] byteArray)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBytesAsync(file, byteArray);
return true;
}
public async Task<byte[]> ReadFile(string fileName)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync(fileName);
IBuffer buffer = await FileIO.ReadBufferAsync(file);
return buffer.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
更新:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
byte[] fancyByteArray = { 0, 1, 2, 3, 4, 5 };
bool t = await WriteFile("Testfile", fancyByteArray);
byte[] task = await ReadFile("Testfile");
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.