C# 当只知道文件名时,如何获取文件名的路径?

C# 当只知道文件名时,如何获取文件名的路径?,c#,C#,假设我在system$PATH的目录中有一个已编译的C程序(我们称之为example2.exe),这样我就可以从Windows的任何文件夹调用它。在命令行中,我进入c:\apps并使用现有文件作为参数运行example2.exe,例如:example2.exe file.txt。是否可以获取file.txt的完整路径 另一个选项可以是。\file.txt,它不会指向当前词典中的文件。是您要查找的 var fileName = "file.txt"; //comes from args obvio

假设我在system
$PATH
的目录中有一个已编译的
C
程序(我们称之为
example2.exe
),这样我就可以从Windows的任何文件夹调用它。在命令行中,我进入
c:\apps
并使用现有文件作为参数运行
example2.exe
,例如:
example2.exe file.txt
。是否可以获取
file.txt的完整路径

另一个选项可以是
。\file.txt
,它不会指向当前词典中的文件。

是您要查找的

var fileName = "file.txt"; //comes from args obviously
var fullPath = Path.Combine(Directory.GetCurrentDirectory(), fileName);
这就是你要找的

var fileName = "file.txt"; //comes from args obviously
var fullPath = Path.Combine(Directory.GetCurrentDirectory(), fileName);

您如何知道
“file.txt”
字符串表示编译程序的文件名
“example2”
?用户通常表示c:\apps\file.txt。如果正确设置了Environment.CurrentDirectory,则Path.GetFullPath()返回的值。当您在命令行上调用“del myfile.txt”时,它应该是@dasblinkenlight,您希望删除哪个文件?是相对于当前目录还是相对于del命令中隐藏的代码?@SirRufo您所说的是
del
command,它的语义已经很好地指定了。另一方面,OP讨论了一个名为
example2.exe
的编译程序,它可以做任何它想做的事情。将其解释为“它以
del
命令的方式精确地处理字符串”是一种可能的假设。@DasbLinkedLight我没有提到我正在创建一个应用程序,这个假设是正确的。你怎么知道
“file.txt”
字符串表示编译程序的文件名
“example2”
?用户通常指的是c:\apps\file.txt。如果正确设置了Environment.CurrentDirectory,则Path.GetFullPath()返回的值。当您在命令行上调用“del myfile.txt”时,它应该是@dasblinkenlight,您希望删除哪个文件?是相对于当前目录还是相对于del命令中隐藏的代码?@SirRufo您所说的是
del
command,它的语义已经很好地指定了。另一方面,OP讨论了一个名为
example2.exe
的编译程序,它可以做任何它想做的事情。将其解释为“它以
del
命令的方式精确处理字符串”是一种可能的假设。@dasblinkenlight我没有提到我正在创建一个应用程序,这个假设是正确的。您如何知道编译后的程序从其当前目录读取?据我们所知,它可能是从
c:\temp\file.txt
读取的,因为文件名的解释完全取决于正在运行的程序。它不必是当前字典,因为我可以作为参数
。\file.txt
。我会将相对文件名始终视为相对于当前目录。99%的应用程序都会这样做。@m当当前目录为c:\temp\foo且参数为..\file.txt时,组合后的c:\temp\foo\..\file.txt与c:\temp\file完全相同。txt@menteith您应该使用与上述代码完全相同的内部代码,但是,您可以确保像当前平台一样对待文件名。但是请记住,要尽快获取完整路径,否则一旦您更改当前目录而不知道(某些对话框可能更改当前目录),您可能会获得不同的文件名。您如何知道编译程序从其当前目录读取?据我们所知,它可能是从
c:\temp\file.txt
读取的,因为文件名的解释完全取决于正在运行的程序。它不必是当前字典,因为我可以作为参数
。\file.txt
。我会将相对文件名始终视为相对于当前目录。99%的应用程序都会这样做。@m当当前目录为c:\temp\foo且参数为..\file.txt时,组合后的c:\temp\foo\..\file.txt与c:\temp\file完全相同。txt@menteith您应该使用与上述代码完全相同的内部代码,但是,您可以确保像当前平台一样对待文件名。但是请记住,要尽快获取完整路径,否则在不知道的情况下更改当前目录时,可能会得到不同的文件名(某些对话框可能会更改当前目录)