【问题标题】:How to convert DOS path to normal path (.net)如何将 DOS 路径转换为普通路径 (.net)
【发布时间】:2016-07-23 00:25:45
【问题描述】:

我有一个使用 FileSystemWatcher 对象跟踪本地文件夹更改的程序。 问题是,有时,在某些环境和情况下(我不知道是哪些),这个观察者在 DOS 路径上给我一个事件(“/Hello/How/Are/You”变成类似于“/HE~1/ HO~1/AR~1/YO~1")。

我正在寻找一种方法来强制这条路径回到它的完整和正常的方面。

或者至少可以告诉我该路径确实是 DOS 路径,因此我可以以不同的方式处理该条目。

编辑:它必须在长路径(+260 个字符)上工作,所以 Path.GetFullPath(sShortPath) 在这里对我不起作用!

【问题讨论】:

  • 你试过Path.GetFullPath吗?

标签: c# .net filesystemwatcher


【解决方案1】:

Path.GetFullPath(@"/HE~1/HO~1/AR~1/YO~1") 应该做你需要的。

【讨论】:

  • 我会尽快进行测试!感谢您的快速回答!
  • 好吧,实际上它对我不起作用,因为我需要它来处理长路径。请参阅我的答案以获得我的解决方案!是的,我会用长路径精度更新我的帖子;)
【解决方案2】:

最佳方法取决于您要查找的内容,如果您只想访问一次文件,那么 8 字节文件名将适用于内部文件引用

如果您想向用户或商店展示,则有 2 个选项

  1. Path 包含操作路径所需的大部分工具 fullPath = Path.GetFullPath(path1);

  2. FileInfoDirectoryInfo 这两个类提供对文件和目录信息的持久访问,虽然它们可以使用任何有效路径创建,但它们都具有提供对完整路径的访问的全名属性

【讨论】:

  • 我想补充一点,8 字节路径中的数字会随时间而变化(不过,这可能是特定于版本的),因此不应长时间存储此类短路径甚至作为内部文件参考。
【解决方案3】:

正如其他人所说,如果不将 Path.GetFullPath(sShortPath) 用于很长的路径(+260 个字符),则可以正常工作。

这是我关注的link,它对我有用。

来自 kernel32.dll 的 GetLongPathName 对我来说很好用,我只需将 255 StringBuilder 限制更改为更高的值,以使其适用于长路径。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2015-09-10
    • 2019-10-01
    • 2014-01-28
    • 2019-08-18
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多