在C#应用程序中打开文本文件

时间:2013-05-10 07:01:44

标签: c#

在编程时我还是初学者,这是我在C#教程后做的一个小应用程序。

private void viewImagesToolStripMenuItem_Click(object sender, EventArgs e)
     {

string openedfile = "";

        openfd.Title = "Insert a text file";
        openfd.InitialDirectory = "C:";
        openfd.FileName = "";
        openfd.Filter = "text files|*.txt|word documents|*.doc|allfiles|*.*";


        if (openfd.ShowDialog() == DialogResult.Cancel)

        {
            MessageBox.Show("Operation canceled");
        }

        if (openfd.ShowDialog() != DialogResult.Cancel)

        {
            openedfile = openfd.FileName;
            richTextBox1.LoadFile(openedfile,RichTextBoxStreamType.PlainText);
        }

在执行此操作时,我注意到如果我将相同应用程序的代码顺序更改为2行 -

   string openedfile = "";
   openedfile = openfd.FileName; 

如下所示在调试时会抛出这样的错误 - 空路径名称不合法。

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {


        openfd.Title = "Insert a text file";
        openfd.InitialDirectory = "C:";
        openfd.FileName = "";
        openfd.Filter = "text files|*.txt|word documents|*.doc|allfiles|*.*";

        **string openedfile = "";
        openedfile = openfd.FileName;**


        if (openfd.ShowDialog() == DialogResult.Cancel)

        {
            MessageBox.Show("Operation canceled");
        }

        if (openfd.ShowDialog() != DialogResult.Cancel)

        {

            richTextBox1.LoadFile(openedfile,RichTextBoxStreamType.PlainText);
        }

是否有办法理解这些类型情况下的错误。编写这样的应用程序的具体顺序是什么?

4 个答案:

答案 0 :(得分:2)

嗯,这个想法很简单,你不能使用一个未初始化的变量。 在你的情况下sm事情正在发生。 在你的第一个代码中openfile = openfd.FileName;正在显示拨号码后正在执行。因此文件名正确。 但是在第二个openfile = openfd.FileName;在稀释器出现之前,它已经被初始化了。由于没有对话,名称为空,因此它会出错。

请注意。我没有用tecnical方式使用初始化的单词。

答案 1 :(得分:1)

我要继续猜测问题是if块之外的openfd.FileName调用(也是在它被检索之前),而if块仍在被执行,openfd是“如果你愿意,可以保持打开状态,这样你就可以检索它的结果。

当你离开if块时,你实际上已经说完了这个对话框,请继续。

在您的代码中,您显示多个对话框,其中还有多个调用以显示对话框,请考虑以下内容。

    if (openfd.ShowDialog() == DialogResult.OK)
    {
        pictureBox1.Image = Image.FromFile(openfd.FileName);
    }
    else
    {
        MessageBox.Show("Operation canceled");
    }

(更改为使用dialogresult.ok,因为这很可能是您希望从对话框中收到的结果)

<强>更新

关于您当前的应用程序,每次调用ShowDialog()都会打开一个新对话框。考虑它类似于

MessageBox.Show("woo");
MessageBox.Show("hoo");

在上面,当第一个消息框关闭时,它将关闭对话框并转到处理第二个消息框(下一行代码),并带有

if (openfd.ShowDialog() != DialogResult.Cancel)

你的showdialog仍被if语句使用,因此它被认为仍在使用中,不会立即处理掉。当if语句结束时,您的对话将被视为可以处置

此外,您的应用程序中的错误与文件名路径无关,它试图加载没有名称的文件

答案 2 :(得分:1)

openedfile = openfd.FileName;不会绑定这两个变量,它会复制 openfd.FileName此时 的值<{1> }}。

在您的第二个示例中,用户当时尚未选择文件,因此该值仍为空(openedfile)。稍后在""中选择的值将被忽略。

编辑这就是您收到错误openfd

的原因

答案 3 :(得分:0)

我通常更喜欢这个:

private void viewImagesToolStripMenuItem_Click(object sender, EventArgs e)
 {

    DialogResult dr=openfd.ShowDialog();
    if(dr==DialogResult.Ok)
    {   
       richTextBox1.LoadFile(openfd.FileName,RichTextBoxStreamType.PlainText);           
    }
    else
    {
      MessageBox.Show("No file Selected!!");
    }

}