【问题标题】:Windows Path ConversionWindows 路径转换
【发布时间】:2018-11-26 09:20:16
【问题描述】:

我想将"C:\Program Files\x\y\z" 转换为"C:\%ProgramFiles%\x\y\z"C:\Progra~1\x\y\z"(DOS 短路径)。这个 C#.Net 怎么做?

要将长路径转换为 ​​DOS 短路径,我尝试了解决方案 posted here,但是在我的 Windows 10 上它不起作用。有什么提示吗?

更新 - 请注意,路径可能存在也可能不存在于磁盘上。我正在寻找一种可以将任意路径字符串转换为上述格式的解决方案。使用 GetShortPathName(...) 的解决方案仅在 LongPath 物理存在于磁盘上时才有效。

【问题讨论】:

  • 我不认为你想要 C:\%ProgramFiles%\x\y\z 因为 %ProgramFiles% 扩展到例如c:\program files 意味着你最终会得到c:\c:\program files\x\y\z 的路径。你是说%ProgramFiles%\x\y\z 吗?
  • 是的。这是错字。我想要和你提到的一样的行为。

标签: c# .net .net-3.5


【解决方案1】:

如果您在应用程序中输入了一个字符串,例如“c:\program files\x\y\z”,并且您知道这是错误的位置,但不知道正确的位置在哪里,那么您就去必须假设c:\program files 表示“程序文件文件夹”并用Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) 的结果执行字符串替换,具体取决于您断言它是什么

var wrongPath = @"c:\program files\x\y\z";
var actualPath = wrongpath.Replace(
  @"c:\program files", 
  Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
);

要转换为短路径,请尝试以下操作:Method to convert a long path name to a short path returns a null

【讨论】:

  • 只有当机器上存在长路径时,使用 GetShortPathName(...) pinvoke 转换为短路径的链接才有效。我的要求是将任意路径字符串转换为短路径。
  • 这就像在说“我想知道用户保存文件的路径,然后再选择保存位置”。您无法知道 windows 会将其缩短到的路径,因此它为什么需要首先存在。可能是c:\programs i love\xyz.txt 中的文件路径变为c:\progra~3\xyz.txt,因为已经存在c:\program files -> c:\progra~1c:\program files(x86) -> c:\progra~2 - 因此在将文件写入磁盘之前,您无法任意决定任何短路径,你必须放置文件,然后询问windows短路径是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多