2011-06-10 103 views
7

在我的项目根文件夹中创建了一个文本文件。现在,我试图使用Process.Start()方法从外部启动该文本文件。用WPF打开一个文本文件

我在这里得到的问题是文件路径不正确,Process.Start()找不到这个文本文件。我的代码如下:

Process.Start("Textfile.txt"); 

那么我们应该如何正确我参照该文本文件?我可以使用相对路径而不是绝对路径吗?谢谢。

编辑: 如果我改变上面的代码到这个,它会工作吗?

string path = Assembly.GetExecutingAssembly().Location; 
Process.Start(path + "/ReadMe.txt"); 
+0

您需要确保文件被复制,您不能使用'Process.Start'嵌入资源。检查属性并分别设置属性“复制到输出目录”。 – 2011-06-10 03:13:59

回答

12

Windows需要知道在哪里可以找到这个文件,所以您需要以某种方式规定:使用绝对路径

或者:

Process.Start("C:\\1.txt"); 

或设为当前目录:

Environment.CurrentDirectory = "C:\\"; 
Process.Start("1.txt"); 

通常将CurrentDirectory设置为可执行文件的位置。

[编辑]

如果该文件是在可执行文件是你可以使用这样的代码相同的目录:

var directory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
var file = Path.Combine(directory, "1.txt"); 
Process.Start(file); 
+0

如果我这样做,它会工作吗? string path = Assembly.GetExecutingAssembly()。Location; Process.Start(path +“/ReadMe.txt”); – woodykiddy 2011-06-10 03:15:11

+0

如果文件与可执行文件位于同一目录中,则是。但是,您最好使用Path.Combine而不是字符串连接。另外'Location'里面会有文件名。您只需要获取目录。 – 2011-06-10 03:17:16

+0

@woodykiddy - 更新了答案。 – 2011-06-10 03:19:46

1

如果您想使用相对路径,您需要知道当前目录。

System.Envrionment.CurrentDirectory 

你可以追加一条到您的路径与路径

System.IO.Path.Combine(System.Envrionment.CurrentDirectory, "Textfile.txt") 
+0

'Process.Start'可以打开几乎任何东西,它会尝试使用与该文件关联的应用程序。 – 2011-06-10 03:08:29

+0

啊。现在我觉得stoopid;) – 2011-06-10 03:09:56

+0

如果'ProcessStartInfo.UseShellExecute'为true,这是默认值。 – 2011-06-10 03:33:06

2

的方式,你正在做的,这是好的。这将找到与您的exe文件位于同一目录中的文本文件,并且它会使用默认应用程序(可能是notepad.exe)打开它。以下是如何做到这一点更多的例子:

http://www.dotnetperls.com/process-start

不过,如果你想要把一个路径,你必须使用完整路径。你可以建立完整的路径,而仅使用在这篇文章中列出的方法关心的相对路径:

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/e763ae8c-1284-43fe-9e55-4b36f8780f1c

这将是这个样子:

string pathPrefix; 

if(System.Diagnostics.Debugger.IsAttached()) 
{ 
    pathPrefix = System.IO.Path.GetFullPath(Application.StartupPath + "\..\..\resources\"); 
} 
else 
{ 
    pathPrefix = Application.StartupPath + "\resources\"; 
} 

Process.Start(pathPrefix + "Textfile.txt"); 

这是打开一个文件在您添加到名为资源的项目的文件夹中。如果你想在你的项目根目录下,只需放下上面两个字符串中的资源文件夹,你就会很好。

0

在窗口框上:

开始记事本及其紧随其后的文件位置。赢得

process.start("notepad C:\Full\Directory\To\File\FileName.txt");