我在项目根文件夹中创建了一个文本文件。现在,我正在尝试使用Process.Start()
方法从外部启动该文本文件。
我遇到的问题是文件路径不正确,Process.Start()
无法找到此文本文件。我的代码如下:
Process.Start("Textfile.txt");
那么我应该如何正确引用该文本文件?我可以使用相对路径而不是绝对路径吗?感谢。
编辑: 如果我将上面的代码更改为此,它会起作用吗?
string path = Assembly.GetExecutingAssembly().Location;
Process.Start(path + "/ReadMe.txt");
答案 0 :(得分:13)
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);
答案 1 :(得分: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");
这用于在您添加到项目中的文件夹中打开一个名为resources的文件。如果你想在你的项目根目录中,只需删除上面两个字符串中的资源文件夹,你就可以了。
答案 2 :(得分:1)
如果要使用相对路径,则需要知道当前目录。
System.Envrionment.CurrentDirectory
您可以使用路径
将其附加到路径中System.IO.Path.Combine(System.Envrionment.CurrentDirectory, "Textfile.txt")
答案 3 :(得分:1)
尝试使用Application.StartupPath路径,因为默认路径可能指向当前目录。
此方案已在以下链接中解释..
Environment.CurrentDirectory in C#.NET
http://start-coding.blogspot.com/2008/12/applicationstartuppath.html
答案 4 :(得分:0)
在Windows框中:
使用紧随其后的文件位置启动记事本。 WIN
process.start("notepad C:\Full\Directory\To\File\FileName.txt");