[英]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.