c# – .Net中的文件操作是否有异步替代?
发布时间:2020-12-16 01:58:29 所属栏目:百科 来源:网络整理
导读:我正在使用c#和.Net 4.5.所以我可以使用.Net 4.5的async / await功能.但是我没有在System.IO中找到File.Copy,File.Move,Directory.GetFiles等的异步方法. 解决方法 有很多方法可以做到这一点. 看看我从msdn为你复制的这个例子. 您可以使用FileStream和CopyTo
我正在使用c#和.Net 4.5.所以我可以使用.Net 4.5的async / await功能.但是我没有在System.IO中找到File.Copy,File.Move,Directory.GetFiles等的异步方法.
解决方法
有很多方法可以做到这一点.
看看我从msdn为你复制的这个例子. 您可以使用FileStream和CopyToAsync来实现: using System; using System.Threading.Tasks; using System.Windows; using System.IO; namespace WpfApplication { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private async void Button_Click(object sender,RoutedEventArgs e) { string StartDirectory = @"c:Usersexampleuserstart"; string EndDirectory = @"c:Usersexampleuserend"; foreach (string filename in Directory.EnumerateFiles(StartDirectory)) { using (FileStream SourceStream = File.Open(filename,FileMode.Open)) { using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('')))) { await SourceStream.CopyToAsync(DestinationStream); } } } } } } 或者通过使用StreamReader和StreamWriter对象来异步读取和写入文件的内容. private async void Button_Click(object sender,RoutedEventArgs e) { string UserDirectory = @"c:Usersexampleuser"; using (StreamReader SourceReader = File.OpenText(UserDirectory + "BigFile.txt")) { using (StreamWriter DestinationWriter = File.CreateText(UserDirectory + "CopiedFile.txt")) { await CopyFilesAsync(SourceReader,DestinationWriter); } } } public async Task CopyFilesAsync(StreamReader Source,StreamWriter Destination) { char[] buffer = new char[0x1000]; int numRead; while ((numRead = await Source.ReadAsync(buffer,buffer.Length)) != 0) { await Destination.WriteAsync(buffer,numRead); } } 更多信息: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |