【问题标题】:Trouble getting absolute path of a file无法获取文件的绝对路径
【发布时间】:2015-05-28 17:09:23
【问题描述】:

我有一个包含选项卡的脚本编辑器。每个标签页都有一个包含文件名的标题。我也有以下代码:

string fileName = tabControl.SelectedTab.Text;
string filePath = Path.GetFullPath(fileName);

上面的代码应该返回fileName的绝对路径。但是,我发现它实际上返回了我的脚本编辑器 .exe 的绝对路径!

为什么会这样?我已经测试过了,是的,fileName 确实有正确的文件名,那为什么Path.GetFullPath() 不起作用?

【问题讨论】:

  • 你需要告诉我们filename的值。
  • 我将举一个上面代码的例子:我正在使用我的脚本编辑器处理一个名为 myprogram.c 的文件,该文件位于 Documents 目录中,而我的脚本编辑器位于文件夹里面的文件夹里面......你明白了。我没有得到PC/MyName/Documents,而是得到PC/MyName/Documents/Folder/...(folders).../script_editor.exe

标签: c# winforms absolute-path


【解决方案1】:

您必须保留有关文件绝对路径的信息 - 无法仅根据文件名来构造它。

为什么Path.GetFullPath(fileName) 不起作用:此方法根据当前工作目录将文件的相对路径转换为绝对路径。该位置可以在程序运行时更改(即使用文件打开对话框时),默认情况下从您的 exe 文件目录开始(通常与您的文本文件的位置无关)。

【讨论】:

  • 嗯,这就解释了为什么Path.GetFullPath返回了我的脚本编辑器的绝对路径。
【解决方案2】:

如果您创建一个FileInfo 对象并使用FullName 属性,它应该可以工作。

Path.GetFullPath 的古怪行为的答案可能在于MSDN,但仅此片段就对我提出了危险信号:

path 指定的文件或目录不需要存在。例如,如果 c:\temp\newdir 是当前目录,则对 test.txt 等文件名调用 GetFullPath 将返回 c:\temp\newdir\test.txt。该文件不必存在。

【讨论】:

  • 它有什么不妥之处?如果您不提供路径,它还能在哪里获得路径?暗示文件系统中存在具有该名称的文件的路径是什么?
  • 我用这个:FileInfo filePath = new FileInfo(fileName); 并用这个:MessageBox.Show(filePath.FullName); 检查结果,但它似乎与我的原始代码完全相同。我是不是做错了什么?
  • 我会检查文件信息的Exists 属性,并检查Directory.GetCurrentDirectory() 以查看程序认为当前工作目录的内容。您似乎正在尝试执行相对路径,但问题似乎在于您没有清楚地映射出程序所在位置和文件所在位置之间的路径。
猜你喜欢
  • 2014-10-22
  • 2012-04-24
  • 2010-09-18
  • 2017-03-16
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多