Ben*_*dEg 28 c# filesystems asynchronous async-await system.io.file
请问.NET框架的async内置库/组件,它可以与文件系统的工作(例如File.ReadAllBytes,File.WriteAllBytes)?
还是我用我自己写的库async的方法StreamReader和StreamWriter?
像这样的东西会很不错:
var bytes = await File.ReadAllBytes("my-file.whatever");
Run Code Online (Sandbox Code Playgroud)
i3a*_*non 36
.net框架是否具有异步内置库/程序集,允许使用文件系统
是.有异步方法用于处理文件系统,但不支持静态File类型的辅助方法.他们在FileStream.
所以,没有,File.ReadAllBytesAsync但有FileStream.ReadAsync,等等.例如:
byte[] result;
using (FileStream stream = File.Open(@"C:\file.txt", FileMode.Open))
{
result = new byte[stream.Length];
await stream.ReadAsync(result, 0, (int)stream.Length);
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*zer 16
它已经做到了.请参阅例如使用Async for File Access MSDN文章.
private async Task WriteTextAsync(string filePath, string text)
{
byte[] encodedText = Encoding.Unicode.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*ary 10
.net框架是否具有允许使用文件系统的异步内置库/程序集(例如File.ReadAllBytes,File.WriteAllBytes)?
不幸的是,桌面API在异步文件操作方面有点不稳定.如您所述,许多不错的便捷方法没有异步等价物.还缺少异步打开文件(在通过网络共享打开文件时尤其有用).
我希望在世界迁移到.NET Core时添加这些API.
或者我是否必须使用StreamReader和StreamWriter的异步方法编写自己的库?
这是目前最好的方法.
请注意,使用ReadAsync/ WriteAsync和朋友时,必须显式打开文件以进行异步访问.执行此操作(当前)的唯一方法是使用FileStream带有bool isAsync参数(传递true)或FileOptions参数(传递FileOptions.Asynchronous)的构造函数重载.所以你不能使用像方便的开放方法File.Open.
在 .NET 核心(自 2.0 版起)中,现在有相应 ReadAll/WriteAll/AppendAll 方法的所有异步风格,例如:
File.(Read|Write|Append)All(Text|Lines|Bytes)Async
Run Code Online (Sandbox Code Playgroud)
https://docs.microsoft.com/en-us/dotnet/api/system.io.file.readallbytesasync?view=netcore-2.1
不幸的是,.NET 标准 2.0 中仍然缺少它们。
| 归档时间: |
|
| 查看次数: |
10462 次 |
| 最近记录: |