2016-12-14 14 views
1

ボタンをクリックしてコードを初めて実行すると、button1_Clickイベント(PDFを新しい場所にコピー)が完全に機能します。私はこれは間に2回実行することができるようにしたくない、明らかに2番目のボタンクリックでC#System.UnathorizedAccessExceptionが発生する

System.UnauthorizedAuthorizedAccessException: Access to the path "\share\drive....

しかし、ボタンを(同じテキストボックスのエントリを持つ)は、第2の時間をクリックすると、それは次のようなエラーがスローされますセッション、同じテキストボックスのエントリを指定します。それに取り組む前に、この例外エラーを修正したいと思います。誤ってパスを開いたままにしていますか?解決策を示すように更新

コード:

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 {} //リソースを解放しようとしました':空の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;'と組み合わせてcharmのように働きました。ありがとうございました! – Tennis

0

私はあなたが選択したファイルを上書きせずにFile.Copyを使用しているとします。 これは、ファイルがコピーされていて、OSによって一時的にロックされていることを意味しています。変更されていない(読み取り専用)。これがあなたの理由です。UnauthorizedAccessException

最初にファイルにアクセスできるかどうかを確認してください。

+0

上記の変更を行った後、ファイルが変更(上書き)できるようになりました。 – Tennis

関連する問題