2016-10-21 7 views
0

これは実際の問題解決を必要としません。ちょうど何かの性質について不思議。既に開いているファイルを.OpenFile()するのはいいですか?

このイベントを2回連続してトリガーすると、同じファイルを両方選択しても、ファイルを明示的にクローズしていないのにエラーは発生しません。 ReadLineがファイルの最後に到達したときにファイルが自動的に閉じるか、同じアプリケーションによって開かれている限りすでに開いているファイルを開こうとしても問題ありませんか?

private void uIDownloadToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      int lineNum = 1; 
      using (OpenFileDialog dlgOpen = new OpenFileDialog()) 
       try 
       { 
        // Default file extension 
        dlgOpen.DefaultExt = "*.hex"; 
        // SaveFileDialog title 
        dlgOpen.Title = "Download UI Image"; 
        // Available file extensions 
        dlgOpen.Filter = "Hex Files (*.hex)|*.hex|All Files (*.*)|*.*"; 
        // Show SaveFileDialog box and save file 
        if (dlgOpen.ShowDialog() == DialogResult.OK) 
        { 
         dlgOpen.OpenFile(); 
         string file = dlgOpen.FileName; 
         StreamReader reader = new StreamReader(file); 
         var result = MessageBox.Show("Please confirm the file:" + file, "Confirm", MessageBoxButtons.OKCancel); 
         if (result == DialogResult.OK) 
         { 
          commandConstruct(OP.SETSTATE, DEV.SPI_DEV, "1" , ""); 
          if (ready == true) 
          { 
           using (reader) 
           { 

            string check; 
            bool verified = true; 
            do 
            { 
             check = reader.ReadLine(); 

            } while (check != null); 
           } 
          } 
         } 

        } 
       } 
       catch (Exception errorMsg) 
       { 
        MessageBox.Show(errorMsg.Message); 
       } 
     } 

答えて

1

Using()内にバンドルされている場合、心配する必要はありません。そうでなければ、エラーは発生しませんが、メモリチャンクはまだ占有されます。したがって、ファイルが非常に大きく、メモリ管理を制御する必要がある場合は、Using()を使用してバンドルする方が良いでしょう

0

StreamReaderは、ファイルが読み込まれると閉じる必要があります。あなたが読んだだけのためにファイルを開いたなら、それはokであるはずです。 linkを参照してください。

using (StreamReader r = new StreamReader("file.txt")) 
{ 
    allFileText = r.ReadToEnd(); 
} 
0

「使用する」とは、それを単独で終了することを発見しました。