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

c# – 是否可以在不等待结果的情况下“启动”(大)文件的副本?

发布时间:2020-12-15 23:48:55 所属栏目:百科 来源:网络整理
导读:我认为这在标题中非常明显;我想复制文件而不等待结果. 我想要这个: static void Main(string[] args) { string strCmdText = @"/C xcopy c:usersfloriandesktopmytestfile.fil p:"; System.Diagnostics.Process.Start("CMD.exe",strCmdText); Console.
我认为这在标题中非常明显;我想复制文件而不等待结果.

我想要这个:

static void Main(string[] args)
    {
        string strCmdText = @"/C xcopy c:usersfloriandesktopmytestfile.fil p:";
        System.Diagnostics.Process.Start("CMD.exe",strCmdText);
        Console.WriteLine("Finished !");
    }

基本上我的主线程在几毫秒后释放.
我尝试这样做:

static void Main(string[] args)
    {
        var t = Task.Run(() => Copy(@"c:UsersflorianDesktopmytestfile.fil","p:"));
    }

    private static void Copy(string source,string destination)
    {
        using (FileStream SourceStream = File.Open(source,FileMode.Open))
        {
            using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf(''))))
            {
                SourceStream.CopyToAsync(DestinationStream);
            }
        }
    }

我的mytestfile.fil是在我的目标文件夹中创建的,但其大小为0kb.

问候,

解决方法

Basically my main thread is released after few milliseconds. I try to do like this

你必须以某种方式让这个过程保持活力.最简单的方法 – 如果你真的必须在自己的线程上进行文件复制 – 就是在前台线程上执行你的Copy方法:

class Program
{
    static void Main(string[] args)
    {
        System.Threading.Thread thread = new System.Threading.Thread(()=> Copy(@"c:UsersflorianDesktopmytestfile.fil","p:"));
        thread.Start();
    }

    private static void Copy(string source,FileMode.Open))
        {
            using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf(''))))
            {
                SourceStream.CopyTo(DestinationStream);
            }
        }
    }
}

…或者您可以在主线程上执行它,因为您的应用程序似乎没有其他任何东西:

class Program
{
    static void Main(string[] args)
    {
        string source = @"c:UsersflorianDesktopmytestfile.fil";
        string destination = "p";
        using (FileStream SourceStream = File.Open(source,FileMode.Open))
        {
            using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf(''))))
            {
                SourceStream.CopyTo(DestinationStream);
            }
        }
    }
}

第三个选项是使您的方法异步并等待它在Main方法中同步完成:

class Program
{
    static void Main(string[] args)
    {
        CopyAsync(@"c:UsersflorianDesktopmytestfile.fil","p:").Wait();
    }

    private static async Task CopyAsync(string source,FileMode.Open))
        {
            using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf(''))))
            {
                await SourceStream.CopyToAsync(DestinationStream);
            }
        }
    }
}

请注意,除非您实际等待它,否则不应使用异步CopyToAsync方法.不要混用同步和异步代码:)

(编辑:李大同)

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

    推荐文章
      热点阅读