2016-12-14 3 views
1

Событие button1_Click (копирование PDF-файла в новое место) отлично работает при нажатии кнопки, и код выполняется в первый раз;C# System.UnathorizedAccessException на 2-й кнопке Нажмите

однако, при нажатии на кнопку второй раз (с той же записи текстовое поле), он выдает следующее сообщение об ошибке:

System.UnauthorizedAuthorizedAccessException: Access to the path "\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 
+1

не имеет отношения к вашей проблеме: 'finally {} // Используется совместно с Try to Release resources': пустой блок finally сделает ... ничего! (нет освобождения какого-либо ресурса, а не того, что вам нужно здесь ... просто удалите это окончательно) –

+0

Я предположил, что он освобождает ресурсы. Спасибо. – Tennis

ответ

0

У меня также была проблема, я добавил следующую строку кода до и после копирования/удаления.

File.Copy(file, dest, true); 
File.SetAttributes(dest, FileAttributes.Normal); 

(PS: Взято из Why is access to the path denied?)

+0

Работал как шарм в сочетании с: 'permissions.Attributes & = ~ FileAttributes.ReadOnly;' устанавливается во время метода создания каталога. Спасибо! – Tennis

0

Я полагаю, вы используете File.Copy без перезаписи выбранного файла. Это означает, что файл копируется и временно блокируется ОС, а затем он не открыт для изменений (только для чтения). Это является причиной вашего UnauthorizedAccessException.

Проверьте, можете ли вы сначала загрузить файл.

+0

После внесения изменений выше, кажется, что файлы теперь открыты для изменения (перезаписать). – Tennis

Смежные вопросы