是否可以.OpenFile()一个已经打开的文件?

时间:2016-10-21 03:15:54

标签: c# winforms streamreader openfiledialog

这不需要任何实际的问题解决。只是想知道某事的本质。

我注意到如果我连续两次触发此事件,两次都选择相同的文件,即使我从未明确关闭文件,也不会出现任何错误。当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);
                }
        }

3 个答案:

答案 0 :(得分:1)

如果将它捆绑在Using()中,那么你不必担心,如果没有,它不会抛出任何错误,但只是内存块仍然会被占用。所以,如果您认为文件非常大并且您必须对内存管理进行控制,那么最好使用Using()

进行捆绑。

答案 1 :(得分:0)

读取文件后,应关闭

StreamReader。如果您只打开文件进行阅读,那应该没问题。请参阅link

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

答案 2 :(得分:0)

我发现“使用”会自行关闭它。