2012-05-02 12 views
2

:ここ「プロセスが別のプロセスで使用されているため、ファイルにアクセスできません」というエラーが表示されます。私はエラーを取得しています

The process cannot access the file 'E:\testing\check1.txt' because it is being used by another process.

が私のコードです:

private void timer2_Tick(object sender, EventArgs e) 
{ 
    StreamWriter sw1 = new StreamWriter("E:\\testing\\check1.txt"); 
    sw1.Flush(); 
    if (dt[playback_iterator].iden == this.event_id) 
    { 

     foreach (Type type in asm1.GetTypes()) 
     { 
      if (type.IsSubclassOf(typeof(System.Windows.Forms.Form))) 
      { 
       System.Windows.Forms.Form f = (System.Windows.Forms.Form)Activator.CreateInstance(type); 
       foreach (Control ctrl in f.Controls) 
       { 
        if (ctrl.Handle.ToInt32() == dt[playback_iterator].hndl) 
        { 
         if (ctrl.BackColor.R == this.r_comp && ctrl.BackColor.G == this.g_comp && ctrl.BackColor.G == this.g_comp) 
         { 
          sw1.WriteLine("verification point was set and the test passed"); 
          /*success ob = new success(); 
          ob.Show();*/ 
         } 
         else 
         { 
          sw1.WriteLine("verification point test failed"); 
         } 

        } 
       } 

      } 
      sw1.Close(); 

      if (dt[playback_iterator].hndl == -1 && dt[playback_iterator].x == -1 && dt[playback_iterator].y == -1) 
      { 
       timer2.Enabled = false; 
      } 
      MoveMouse(dt[playback_iterator].hndl, dt[playback_iterator].x, dt[playback_iterator].y); 
      if (dt[playback_iterator].click_detect.Equals("yes")) 
      { 
       ClickMouse(MonkeyButtons.btcLeft, dt[playback_iterator].x, dt[playback_iterator].y, 0, 0); 
      } 
      if (dt[playback_iterator].word != "") 
      { 
       ++count; 
       StringBuilder wd = new StringBuilder(dt[playback_iterator].word); 
       SetForegroundWindow(dt[playback_iterator].hndl); 
       SendKeys.Send(dt[playback_iterator].word); 
      } 
      playback_iterator++; 

     } 
    } 
} 
+3

close notepad :) – Reniuz

+0

このエラーは、あなたが知る必要があることだけを示しています。すでに別のプロセスで使用されています。メモ帳などのウィンドウで開いたことがあるか、別のアプリケーションがすでにファイルを使用している可能性があります。 – SimpleVar

+4

これについてはわかりませんが、foreach()ループの中でファイルハンドラを終了しているようです。つまり、2回目の繰り返しなどで、書き込みが失敗することは明らかです。 – Shai

答えて

0

この条件

if (dt[playback_iterator].iden == this.event_id) 

が真でない場合、StreamWriterが確定し、次回閉じられませんアクセス違反の可能性が高いファイルを開こうとします。

は、あなたにも sw1.Close()を削除することができます using声明

using (StreamWriter sw1 = new StreamWriter("E:\\testing\\check1.txt")) 
{ 
} 

を使用し、作家は、常に正確に一度閉じています。

注:このエラーは、ファイルが現在のプロセスで使用されていることを意味する場合もあります。私はメモ帳がファイルを開いたままにしているとは思わないので、メモ帳は問題ではないでしょう。

0

することができますログにあなたがループ内で作成するたびに追加

string logFile = "E:\\testing\\check1.txt"; 
FileStream fs = new FileStream(logFile, FileMode.Append, FileAccess.Write); 
StreamWriter sw1 = new StreamWriter(fs); 
sw1.Flush(); 
if (dt[playback_iterator].iden == this.event_id) 
{ 

    foreach (Type type in asm1.GetTypes()) 
    { 
     if (type.IsSubclassOf(typeof(System.Windows.Forms.Form))) 
     { 
      System.Windows.Forms.Form f = (System.Windows.Forms.Form)Activator.CreateInstance(type); 
      foreach (Control ctrl in f.Controls) 
      { 
       if (ctrl.Handle.ToInt32() == dt[playback_iterator].hndl) 
       { 
        if (ctrl.BackColor.R == this.r_comp && ctrl.BackColor.G == this.g_comp && ctrl.BackColor.G == this.g_comp) 
        { 
         sw1.WriteLine("verification point was set and the test passed"); 
         /*success ob = new success(); 
         ob.Show();*/ 
        } 
        else 
        { 
         sw1.WriteLine("verification point test failed"); 
        } 

       } 
      } 

     } 
     if (dt[playback_iterator].hndl == -1 && dt[playback_iterator].x == -1 && dt[playback_iterator].y == -1) 
     { 
      timer2.Enabled = false; 
     } 
     MoveMouse(dt[playback_iterator].hndl, dt[playback_iterator].x, dt[playback_iterator].y); 
     if (dt[playback_iterator].click_detect.Equals("yes")) 
     { 
      ClickMouse(MonkeyButtons.btcLeft, dt[playback_iterator].x, dt[playback_iterator].y, 0, 0); 
     } 
     if (dt[playback_iterator].word != "") 
     { 
      ++count; 
      StringBuilder wd = new StringBuilder(dt[playback_iterator].word); 
      SetForegroundWindow(dt[playback_iterator].hndl); 
      SendKeys.Send(dt[playback_iterator].word); 
     } 
     playback_iterator++; 

    } 
} 
sw1.Close(); 
fs.Close(); 

おかげ

0

のためのFileStreamクラスを使用します。..のStreamWriterオブジェクトを閉じないでください、あなたはこのエラーを追加しようとしている場合usingブロックを使用してテキストファイルに書き込む

using (StreamWriter sw1 = new StreamWriter("E:\\testing\\check1.txt")) 
{ 
    if (condition) 
    { 
     foreach (Type type in asm1.GetTypes()) 
     { 
      if (contition) 
      { 
       sw1.WriteLine("verification point was set and the test passed"); 
      } 
     } 
    } 

}

関連する問題