第二个按钮上的C#System.UnathorizedAccessException单击

时间:2016-12-14 13:55:19

标签: c#

单击按钮并且第一次执行代码时,button1_Click事件(将PDF复制到新位置)工作正常;

但是,再次单击该按钮(使用相同的文本框条目)时,会引发以下错误:

  

System.UnauthorizedAuthorizedAccessException:访问路径“\ share \ drive ....

显然,在给定相同的文本框条目的情况下,我不希望它能够在会话期间执行两次。在我解决这个问题之前,我想解决这个异常错误。我错误地把路径打开了吗?

代码已更新以显示解决方案:

public static string Case_No;

namespace CEB_Process
{
    public partial class Form1 : Form 
    {

    public Form1()
    {
        InitializeComponent();
    }



    //===============================
    // TEXT BOX ENTRY
    //===============================
    private void textBox1_TextChanged(object sender, EventArgs e)
    { 
        Form1.Case_No = textBox1.Text;
    }


    //==============================
    // CHECK if Direcotry Exists
    //==============================

    public void CreateIfMissing(string path)
    {
        if (!Directory.Exists(path)) 
        {
            DirectoryInfo di = Directory.CreateDirectory(path);
            //Added
            var permissions = new DirectoryInfo(path);
            permissions.Attributes &= ~FileAttributes.ReadOnly; 
            MessageBox.Show("The directory was created successfully");
        }
    }


    //=================================
    // MOVE Violation PDF's Button Click
    //==================================
    private void button1_Click(object sender, EventArgs e)
    {

        //Declare Source path directory from text box entry
        string sourcePath = string.Format(@"\\share\drive\etc{0}", Case_No);
        string targetPath = string.Format(@"\\share\drive\etc{0}", Case_No);        

            try
            {
                //Call Method to Check/Create Path
                CreateIfMissing(targetPath);

                //Get TRAKiT Violation PDF's from source
                foreach (var sourceFilePath in Directory.GetFiles(sourcePath, "*.pdf"))
                {
                    string fileName = Path.GetFileName(sourceFilePath);
                    string destinationFilePath = Path.Combine(targetPath, fileName);
                    System.IO.File.Copy(sourceFilePath, destinationFilePath, true);
                    File.SetAttributes(destinationFilePath, FileAttributes.Normal);
                }//End For Each Loop
                MessageBox.Show("Files Copied Successfully!");
            }//end try
            catch (Exception x)
            {
                MessageBox.Show("The process failed", x.ToString());
            }


    }//End Button Module

}//End Namespace
}//End Class

2 个答案:

答案 0 :(得分:0)

我也遇到了问题,我在复制/删除之前和之后添加了以下代码行。

SHOW GLOBAL VARIABLES ...

(PS:取自Why is access to the path denied?

答案 1 :(得分:0)

我认为您在不覆盖所选文件的情况下使用File.Copy。 这意味着该文件正在被复制,并且它暂时被操作系统锁定,然后它无法进行修改(只读)。这就是 UnauthorizedAccessException 的原因。

检查您是否可以先访问文件。