2016-10-21 16 views
0

실제 문제를 해결할 필요가 없습니다. 그냥 뭔가의 본질에 대해 궁금해.이미 열려있는 파일을 .OpenFile()해도됩니까?

나는 두 번 연속으로이 이벤트를 트리거하면 동일한 파일을 두 번 선택하면 파일을 명시 적으로 닫지 않았지만 어떤 종류의 오류도 발생하지 않는다는 것을 알게되었습니다. 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은 파일을 읽은 후에 닫아야합니다. 읽기 전용으로 파일을 연 경우 확인해야합니다. link을 참조하십시오.

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

"사용 중"은 자체적으로 종료됨을 발견했습니다.