繁体   English   中英

如何在不使用OpenFileDialog的情况下打开特定的文本文件?

[英]How can I open a specific text file without using OpenFileDialog?

我有一个用C#创建的富文本编辑器。 我现在尝试添加的功能之一是模板。 我不希望用户必须使用OpenFileDialog导航到模板并打开文件。 我想自己指定文件路径,以便用户只需单击一个按钮即可打开模板。

目前,我正在尝试使用以下代码实现这一目标:

private void formalLetterToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            FileStream fileStream = new FileStream(@".\templates\tmp1.rtf", FileMode.Open);
            String str;
            str = fileStream.ToString();
            string fileContents = File.ReadAllText(filepath);
            fileContents = fileStream.ToString();
            try
            { 
                if (richTextBoxPrintCtrl1.Modified == true);
                {
                    NewFile();
                }
                richTextBoxPrintCtrl1.Rtf = fileContents;
            }
            catch (Exception exception)
            {
                MessageBox.Show("There was an error opening the template. " + exception, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show("There was an error opening the template. " + exception, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

但是,每当我尝试打开模板时,都会出现如下异常:

System.ArgumentsException:文件格式无效。

但是,我尝试使用我的OpenFileDialog打开文件,并且工作正常。 有人可以帮助我使它正常工作吗?

您正在加载RTF的天气非常恶劣。 如@evanmcdonnal所解释,将文件读入字符串的代码将永远无法工作。 您成功的基于文件对话框的代码真的做到了吗? 请记住,文件对话框只是用于在字符串中生成文件名的UI。 如果您的带有文件对话框的代码有效,那么当文件对话框被硬编码字符串替换时,它也将起作用。

我怀疑问题的一部分在于您使用的是相对路径。 也许工作目录不是您期望的那样。 您应该指定文件的完整路径。

无论如何,要加载RTF,只需调用控件的LoadFile方法。 但我强烈建议将完整路径传递给文件。

richTextBoxPrintCtrl1.LoadFile(fullPathToRtfFile);

您的问题是您尝试使用str = fileStream.ToString();将文件转换为字符串str = fileStream.ToString(); 但是,这会将文件流转换为不同的字符串。

相反,只需执行string fileContents = File.ReadAllText(filepath); 将所有文件内容转换为字符串。 如果要对文件进行某种类型的处理,则仅需要使用FileStream / StreamReader。

另外,您对FileStream的使用有些不足。 我认为您真正想要的是带有这样的内容的StreamReader(来自msdn的示例);

            using (StreamReader sr = new StreamReader("TestFile.txt")) 
            {
                string line;
                // Read and display lines from the file until the end of  
                // the file is reached. 
                while ((line = sr.ReadLine()) != null) 
                {
                    Console.WriteLine(line);
                }
            }

FileStream不能用于读取文件。 必须将其传递给StreamReader才能真正读取文件,在这种情况下,这样做是没有意义的,因为构造函数的重载会占用文件路径。 仅当您不知道读者将要阅读的流类型时,它才有用。

你在哪里;

        FileStream fileStream = new FileStream(@".\templates\tmp1.rtf", FileMode.Open);
        String str;
        str = fileStream.ToString();
        string fileContents = File.ReadAllText(filepath);
        fileContents = fileStream.ToString();

您实际上只想要细线; string fileContents = File.ReadAllText(filepath); , 没有其他的。 当您仅将所有文本读取为字符串时,就不需要FileStream了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM