加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
    } 
}

更多信息:
http://msdn.microsoft.com/en-us/library/kztecsys(v=vs.110).aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读