[编辑]
我尝试从基本目录中的文件夹中打开文件。
在解决方案资源管理器中,有一个文件夹“Docs”和一个pdf文件(tempPDF.pdf)。 这将对应于我的项目文件夹中的文件夹。 (例如Project \ Docs)这在保存级别为bin和properties文件夹。
String assemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
Process proc = new Process();
proc.StartInfo = new ProcessStartInfo()
{
FileName = assemblyPath + "\\Docs\\tempPDF.pdf"
};
proc.Start();
我已将构建操作更改为“资源”,复制到输出目录更改为“始终复制”。然而,pdf文件不是bin的副本,也不能由程序指定文件。我清理,构建和重建解决方案。
路径一直指向bin \ Debug文件夹,因为这是可执行文件所在的位置,但文件的位置与bin相同。
我可以通过像“Images \ img.png”之类的路径在XAML中简单地指定我的图像,它会相对找到图像。
这应该是一个非常简单的问题 - 通过鼠标点击打开PDF。
[编辑 - 回答]
必须将构建操作更改为“嵌入资源”,而不是“资源”(资源仅复制没有文件的空文件夹) 。我不知道为什么。
答案 0 :(得分:8)
首先,没有XAML解决方案。如果没有代码隐藏协助,我们就无法执行流程。
您显示的URI是相对于当前程序集的。 您可以使用程序集目录路径,然后附加文件的相对路径。 它可以是这样的:
String assemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
Process proc = new Process();
proc.StartInfo = new ProcessStartInfo()
{
FileName = assemblyPath + "\\Docs\\somePDF.pdf"
};
proc.Start();
如果要将文档放在应用程序文件夹中,还可以使用该目录路径而不是汇编路径:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
答案 1 :(得分:0)
你可以像Nadzzz写的那样获得装配路径。如果你想获得'... bin'路径而不是'... bin \ debug',你可以使用Directory.GetParent method.
答案 2 :(得分:0)
static function to open the folder a file is located in.
I use in a static common class for many of my projects.
public static void ShowFileInFolder(string filepath)
{
System.Diagnostics.Process prc = new System.Diagnostics.Process();
prc.StartInfo.FileName = Path.GetDirectoryName(filepath);
prc.Start();
}