您好。在我的C#窗体应用程序中,我想打开.pdf文件。这样做的代码是:
private void btnOpenPdf_Click(object sender, EventArgs e)
{
try
{
System.Diagnostics.Process.Start(lblPdf.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
.pdf文件路径存储在SQL数据库中。它们以这种方式存储:C:\Folder1\Folder2\File Name
在本例中,这意味着:
lblPdf.Text="C:Folder1Folder2File Name";
*注意:文件名存储时没有文件类型(所以最后没有.pdf(
当然这不起作用,所以我在字符串中添加了"@"one_answers".pdf":
lblTest.Text = ("@" + """ + lblPdf.Text + ".pdf" + """);
当我用消息框测试时:
MessageBox.Show(lblTest);
我得到:
@"C:Folder1Folder2File Name.pdf"
我遇到的问题是,这是有效的:
private void btnOpenPdf_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show(lblTest.Text);
System.Diagnostics.Process.Start(@"C:Folder1Folder2File Name.pdf");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但这不起作用:
private void btnOpenPdf_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show(lblTest.Text);
System.Diagnostics.Process.Start(lblTest.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
有人能解释为什么会这样吗?
我在第二个示例中收到的错误消息是:"系统找不到指定的文件">
在这两种情况下,MessageBox.Show都为我提供了正确的语法和文件路径。
谢谢。
@Shovers和其他可能涉及的人:
private void btnOpenPdf_Click(object sender, EventArgs e)
{
lblTest.Text = ("@" +lblPdf.Text + ".pdf" );
try
{
MessageBox.Show(lblTest.Text);
System.Diagnostics.Process.Start(lblTest.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
谢谢大家。
只是添加
+ ".pdf"
对于标签(lblPdf.Text
(是答案。
private void btnOpenPdf_Click(object sender, EventArgs e)
{
try
{
System.Diagnostics.Process.Start(lblPdf.Text + ".pdf");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我可以给你一些提示:
1异常
正确的异常处理是我最讨厌的事,而你的异常处理也有问题。您的代码处理致命的异常。从不捕捉致命的异常是一个非常重要的部分。这样做只会让你产生越来越难以理解的后续错误。以下是我经常联系的两个技巧:
https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/
https://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET
2.那些PDF存储与数据库的关系如何
PDF是二进制大对象(BLOBS(。有两种学派都很难用DB存储Blob,它们都会影响你必须给出的路径:
- 您将blob本身存储在DB中。通常,这需要设置一个HTTP处理程序来提供文件供下载/用户使用。在这种情况下,您需要一个URL来访问这些文件
- 您将文件存储在文件系统中。DB只包含路径。在这种情况下,你必须使用URL、共享路径或其他任何方式下载这些文件
- SQL文件流和其他数据库中的等效属性有点像两者的结合。它的工作原理基本上与第一个类似,性能更接近第二个
- 你可能在这里有一些第四个版本。或者您根本不知道如何使用数据库中的值