打开目录文件夹中的文件

时间:2011-08-26 10:56:02

标签: c# wpf

[编辑]

我尝试从基本目录中的文件夹中打开文件。

在解决方案资源管理器中,有一个文件夹“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。

[编辑 - 回答]

必须将构建操作更改为“嵌入资源”,而不是“资源”(资源仅复制没有文件的空文件夹) 。我不知道为什么。

3 个答案:

答案 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();
}