2011-08-26 103 views
1

[编辑]打开文件

我尝试在我的基地目录中打开一个文件夹中的文件。

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

[编辑 - 与答案]

必须改变生成操作“嵌入的资源”,不“资源”(仅资源复制一个空文件夹没有文件)。我不知道为什么。

+1

Drat!我只知道解决方案背后的代码。必须开始学习XAML! – Polyfun

+0

这会有帮助吗? http://msdn.microsoft.com/en-us/library/system.appdomain.basedirectory.aspx –

+0

它们不是相对于应用程序安装目录安装的吗?如果是这样,您可以使用它和相对路径来获取PDF的完整路径。 – kenny

回答

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); 
+0

@KMC只需添加../然后? 'Filename = assemblyPath +“.. \\”+“\\ Docs \\ somePDF.pdf”;'。但程序集是应用程序的应用程序根文件夹,所以最好将文件(somePDF.pdf)放到应用程序文件夹中。 –

+0

@KMC - 它应该有效,因为代码是正确的。不正确的是您不将该文件复制到Debug文件夹。 –

+0

你可以告诉我一个编译后的图像和实际的PDF文件的文件夹层次结构。 – Nadzzz

0

你可以得到Nadzzz写道的装配路径。如果你想得到'... bin'路径而不是'... bin \ debug',你可以使用Directory.GetParent method.

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