【问题标题】:Windows: how can I move a file with a long path to the recycle bin?Windows:如何将路径较长的文件移动到回收站?
【发布时间】:2013-02-12 16:09:12
【问题描述】:

我正在使用 Python,但我认为 C# 中存在同样的问题。

我希望能够支持扩展路径(len > 260 的路径,表示为 //?/c:/blah/blah)。看起来将文件移动到回收站的标准方法是通过 SHFileOperationW 或 SHFileOperation。

在 python 中,有用的 xplatform 库 move2trash 使用 SHFileOperationW。一些关于 C# 的文章说要使用相同的东西。

SHFileOperationW 的问题在于它不支持扩展路径。这是 SH 工具的一般限制。

有没有人有处理回收站和扩展路径的技巧?

参考链接:C# versionPython version

【问题讨论】:

  • 我刚刚发现了这个 stackoverflow 问题,stackoverflow.com/questions/11737109/…。调查它是否有答案。
  • 这是适用于 Windows 的,对吧?
  • 实际上使用 Win32API 的任何语言都会存在同样的问题。 (鉴于此,使用language-agnostic 代替随机语言标签可能会更好。)
  • 您需要 Vista 或更高版本吗?然后你可以使用IFileOperation,它适用于任何你可以构造IShellItem的东西。这可能只会导致更有用的错误,而不是成功,但值得尝试。
  • 另外,IIRC,Vista Explorer 处理此问题的方式是将文件实际重命名为其“路径压缩”等效项(有关某些背景,请参阅here),然后再将其丢弃。 (XP 资源管理器不必这样做,因为它甚至不会让您首先看到文件……)您可以使用GetShortPathName 更简单地(即使在 XP 中)做同样的事情。跨度>

标签: c# python windows winapi recycle-bin


【解决方案1】:

如果您想了解一些 C# 解决方案,快速搜索“PathTooLongException”会在 Stack Overflow 上引发很多关于它的讨论。您可能可以检索“短名称”并使用它来移动它。此外,您还可以通过http://bcl.codeplex.com/wikipage?title=Long%20Path 处的解决方法查看他们如何在这个 C# 库中处理它

【讨论】:

    【解决方案2】:

    你没有。不能将路径超过 259 个字符的文件放入回收站。

    【讨论】:

    • 我不认为这是完全正确的,因为你绝对可以在 Vista 的资源管理器中做到这一点。 IIRC,其工作方式是使用相同的路径压缩技巧,让您首先在资源管理器中看到文件。
    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多