大多数示例演示了如何从确切位置读取文本文件(例如"C:\Users\Owner\Documents\test1.txt")。但是,如何在不编写完整路径的情况下读取文本文件,以便在复制到其他计算机时我的代码可以正常工作。使用Visual Studio我将2个文本文件添加到项目(控制台项目),并不知道最佳方法来读取这些文件。希望我清楚地描述了我的问题。也许我需要以不同方式添加那些txt文件(例如直接添加到与.exe文件相同的文件夹中)?
Directory.GetCurrentDirectory
和 Path.Combine
:var path = Path.Combine(Directory.GetCurrentDirectory(), "fileName.txt");
它将在应用程序的当前目录中寻找文件fileName.txt
。
Directory.GetCurrentDirectory()
返回一个字符串,其中包含当前工作目录的路径,并且不以反斜杠(\)结尾。使用 Path.Combine()
而不是字符串拼接。 - CodeCaster如果您的应用程序是一项网络服务,则Directory.CurrentDirectory
无法正常工作。
请改用System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "yourFileName.txt"))
。
Directory.CurrentDirectory
将会是 C:\Program Files (x86)\IIS Express
。 - andydavies当你提供一个路径时,它可以是绝对/根路径,也可以是相对路径。如果提供的是相对路径,则会通过获取运行进程的工作目录来解析。
示例:
string text = File.ReadAllText("Some\\Path.txt"); // relative path
以上代码与以下代码具有相同的效果:
string text = File.ReadAllText(
Path.Combine(Environment.CurrentDirectory, "Some\\Path.txt"));
如果您有文件始终位于相对于应用程序的相同位置,请只需包含相对路径,它们应该可以在不同计算机上正确解析。您需要决定文件相对于哪个目录。一旦确定了,就可以按照以下方式构建完整路径:
string fullPathToFile = Path.Combine(dir, fileName);
dir
,那么你将完全取决于进程的工作目录,这是有可能超出你的控制范围的。例如,应用程序的快捷方式可能会指定它。使用文件对话框也可能会更改它。Directory.GetCurrentDirectory()
获取),或与应用程序可执行路径有关(例如,如果使用Windows Forms,则会想到Application.ExecutablePath
,或通过Assembly.GetEntryAssembly().Location
),或与一些特殊的Windows目录相关,如“文档和设置”(您应该使用Environment.GetFolderPath()
与Environment.SpecialFolder
枚举的一个元素)。static void Main(string[] args)
{
}
if (args.Length == 0){ System.Console.WriteLine("Please enter a parameter");}
string fileToRead = args[0];
这将在工作目录中加载一个文件:
static void Main(string[] args)
{
string fileName = System.IO.Path.GetFullPath(Directory.GetCurrentDirectory() + @"\Yourfile.txt");
Console.WriteLine("Your file content is:");
using (StreamReader sr = File.OpenText(fileName))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
Console.ReadKey();
}
static void Main(string[] args)
{
Console.WriteLine("****please enter path to your file****");
Console.Write("Path: ");
string pth = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("Your file content is:");
using (StreamReader sr = File.OpenText(pth))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
Console.ReadKey();
}
如果您使用winforms,可以尝试这个简单的例子:
private void button1_Click(object sender, EventArgs e)
{
string pth = "";
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
pth = ofd.FileName;
textBox1.Text = File.ReadAllText(pth);
}
}
注意前导的\\
string path2 = "\\folderName\\fileName.json";
string text = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), path2));
\\
或驱动器规范开头),则结果是两个路径的连接,中间有一个分隔符字符。如果 path2 包含根目录,则返回 path2。
获取路径有很多种方法。可以参考CurrentDirectory。此外,您可以通过使用Assembly.GetExecutingAssembly().Location获取应用程序的完整文件名,然后使用Path类获取目录名称。
Read("test1.txt");
这样的操作吗? - Lucas