在c#应用中打开文本文件

本文关键字:文本 文件 应用 | 更新日期: 2023-09-27 18:13:10

在编程方面,我仍然是一个初学者,这是我按照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);
        }

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

在c#应用中打开文本文件

思路很简单您不能使用未初始化的变量。在你的例子中,同样的事情也在发生。在你的第一个代码openedfile = openfd.FileName;在显示对话框后执行。因此文件名是正确的。但是在第二个文件中openedfile = openfd.FileName;在对话框显示之前被初始化。由于没有对话框,名称为空,因此给出错误。

openedfile = openfd.FileName;不会绑定这两个变量,它将openfd.FileName此时的值复制到openedfile中。

在第二个示例中,用户当时还没有选择文件,因此该值仍然为空("")。之后在openfd中选择的值将被忽略。

EDIT这就是为什么你得到错误Empty path name is not legal

我猜问题出在openfd。在if块之外调用FileName(也在它被检索之前),当if块仍在执行时,如果您愿意,openfd是"保持打开"的,因此您可以检索其结果。

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

在你的代码中,你要用多个调用来显示对话框,考虑如下:

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

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

对于当前的应用程序,每次调用ShowDialog()都会打开一个新的对话框。可以把它看作类似于

MessageBox.Show("woo");
MessageBox.Show("hoo");
在上面的

中,当第一个消息框关闭时,它将关闭对话框并继续处理第二个消息框(下一行代码),使用

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

你的showdialog仍然被if语句使用,所以它被认为仍然在使用,而不是立即处理。当if语句结束时,您的对话框将被认为可以处理

。同样,应用程序中的错误与文件名路径无关,它试图加载一个没有名称的文件

我一般更喜欢这个:

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!!");
    }
}