c# - 使用 C# Thread 删除文件

标签 c#

我正在阅读这篇关于我的问题的文章 ( Can't delete a file using threads ),但事情对我来说变得越来越困难。

我的问题真的很简单,我只想删除这个旧文件,如果我正常启动方法“dlMoveNovaVersao”,文件会被删除,但如果我把它放在一个线程上(如下所示),我会得到“你不允许”。有人知道有什么问题吗? (我想使用线程)。

    private void verificaVersaoSupervisor_Tick(object sender, EventArgs e)
    {
        Thread threadConexao = new Thread(threadVerificaConexao);
        threadConexao.Start();
    }

    public void threadVerificaConexao()
    {
        try
        {
            Dns.GetHostEntry("www.google.com.br");
            if (verificaVersao())
            {
                try
                {
                    verificaKillSupervisor();
                    dlMoveNovaVersao();
                    Application.Exit();
                }
                catch (Exception)
                { }
            }
            else
            {
                Application.Exit(); 
            }
        }
        catch (Exception)
        { }
    }

    public void dlMoveNovaVersao()
    {
        WebClient webClient = new WebClient();
        webClient.DownloadFile("Anywebsite", @"c:\temp\supervisor.exe);
        try
        {
            File.Delete(@"c:\Test\supervisor.exe); //This file is always there!
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }

只要描述一下目的,我的程序(Supervisor Starter)会在网站上检查我是否正在运行旧版本的“Supervisor”(使用 XML),如果是,我的“Supervisor Starter”会验证是否有一个名为“Supervisor”的进程”运行并在“Supervisor Starter”下载新版本并运行它之后将其杀死。 (程序很小,更新不会超过 4 秒)。

当我的“Supervisor Starter”尝试删除我的程序的旧版本时,问题就开始了。如果我使用线程,我会收到“我无权访问该文件”,如果我在 Form 类上使用相同的方法,该文件将被删除。

最佳答案

我怀疑您在文件正在使用时正在运行线程。当线程运行时,它与当前线程并行运行。您确定该文件已关闭吗?

否则我认为线程可能是使用不属于您的凭据创建的。但我很确定情况并非如此。

看看每个案例是否不同

catch (Exception err)
    {
        MessageBox.Show("User {0}. Message {1}", 
                         System.Security.Principal.WindowsIdentity.GetCurrent().Name, 
                         err.Message);
    }

关于c# - 使用 C# Thread 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977321/

相关文章:

c# - 无法打开下载保存对话框

c# - 是否可以将数据从 AngularJS 传递到 Web 服务中带有模型参数的函数?

c# - 使用查询字符串 MVC 将数组传递给 View

c# - 我如何从 Telegram Bot 创建私有(private)消息?

c# - GenericType <T> 传递给 WEB-API

c# - 连接必须有效且打开才能保存到 MySql

c# - 尝试实现 Speck32/64 分组密码

c# - wp8 应用程序互联网连接检查并防止未处理的关闭

c# - .Net 图表将日期显示为一周中的几天

c# - netsh http 通过组策略 (GPO) 添加 urlacl