问题标签 [max-path]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - File.Delete 上的 System.IO.DirectoryNotFoundException 获取有效路径
我编写了代码以递归方式删除具有所有结构的文件夹。
我得到System.IO.DirectoryNotFoundException
了File.Delete
一个有效的文件名,我从Directory.GetFiles(path)
. 我之前添加File.Exists
过,它告诉我该文件不存在,我可以在资源管理器中看到它。
我知道我可以做到,SHFileOperation
应该可以正常工作。但我想使用本机 C#(没有直接的 Windows API)。
我红色:.NET 4.6.2 和 Windows 10 上的长路径,并在本地组策略编辑器中设置启用“启用 Win 32 长路径”。
我正在使用 .NET Framework 4.7.2。
有谁可以告诉我我的代码有什么问题?或者我能做些什么来让它发挥作用?
错误的路径是:
'E:\CobianBackupOld\cn1629\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\AppIconCache\100\{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_Microsoft Visual Studio 9_0_Application_PreEmptive Solutions_Dotfuscator Community Edition_dotfuscator_exe'
我是该文件的所有者(我有权删除它)。
更新
我部分修复了我的错误,但想知道如何正确修复它(最近的框架应该支持长路径???)。我的实际解决方法是在我的递归函数开始时添加该代码
UPDATE 2 虽然没有直接关系...只是想提一个重点,C# File.Delete 或 Directory.Delete 不会删除只读文件或文件夹,您还应该在删除它们之前将它们的权限更改为正常,否则您将获得访问权限拒绝错误。
仅供参考,我的代码是:
c# - OpenFileDialog 在超过 260 个字符的路径上返回空字符串(或根本不返回)
我正在编写一个程序,该程序需要从系统上的任何位置读取文件。该程序的某些用户的路径超过了 260 个字符的限制。OpenFileDialog
不适用于路径超过 260 个字符的文件。
我试过同时使用System.Windows.Forms.OpenFileDialog
和Microsoft.Win32.OpenFileDialog
。在前者的情况下,当我在导航到并选择文件后单击“打开”时,窗口不会关闭,程序也不会继续。在后者的情况下,当我单击“打开”时,窗口将关闭,但路径是一个空字符串。
我已经更新了我电脑上的注册表。我已经编辑了应用程序清单文件。我会尝试将“//?/”字符串添加到我的路径中,但是没有要添加的路径。
如果我更新了注册表和应用程序清单,我希望上面的代码在长路径和短路径上都能正常工作。我怀疑这只是不支持,但我所有的搜索都显示人们提供的解决方案要么不起作用,要么只在特定情况下起作用。
c# - Windows 10 最大路径长度限制
像我之前的一些人一样,我对最大路径长度限制感到困惑。我使用 robocopy 和新的 Windows 10 机器成功地将文件树传输到 NAS。
在源计算机上,所有文件都在 260 个字符的限制内。使用 robocopy 将它们从路径 e: 复制到路径 \nas-3tb-backup\Public\Save_2019。之后我想用一个小的 C# 程序检查它,但我没有成功。FileInfo 和 File.OpenRead 都无法通过 NAS 名称找到具有扩展路径的文件。记事本、Visual Studio Code、Windows Explorer 等所有程序在显示或打开此文件时都没有问题。我尝试使用此处显示的前缀 \\?\:https ://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maxpath但是 \\?\\\nas-3tb-backup---- 的尝试失败了。链接的文章中仍然有提示更改注册表时扩展路径。我想避免这种情况,因为那时我将不得不更改所有 Windows 计算机,并且由于 Windows 自己的程序可以在没有注册表黑客的情况下工作,所以对我来说应该是可能的。
python - 在 PyInstaller 应用程序中启用 Windows 长文件路径支持
我使用 PyInstaller 构建到可执行文件中的脚本遇到问题。该脚本在作为 Python 脚本运行时运行良好,但在作为 PyInstaller 应用程序运行时,遇到路径超过 260 个字符的文件时会失败。
我知道这是由于Windows 的限制,并且必须在注册表和使用启用该设置的应用程序清单中选择对更长路径的支持。longPathAware
顺便说一句,这在 Python 本身中起作用的原因是因为在 Python 3.6 中,开发人员为python.exe
和启用了此设置pythonw.exe
。
到目前为止,我已经完成了所有这些工作,如果我将以下清单文件放在构建的 PyInstaller 应用程序旁边(使用--onefile
模式),它确实可以工作:
但是,为了让最终用户的应用程序独立且可移植,我试图避免使用外部清单文件,而是让 PyInstaller 将此自定义清单嵌入到可执行文件中。
该--manifest
选项据称是这样做的——至少从 PyInstaller 3.5 开始,根据更改日志和PR #3746:
但是,当指定时,自定义清单文件似乎被忽略了,因为应用程序在没有外部清单文件的情况下继续在长路径上失败,并且在--onedir
模式下检查捆绑的清单文件,它看起来就像它忽略了自定义一个并创建这个代替:
我做错了什么或理解错了吗?该--manifest
选项不符合我的想法吗?这是一个错误吗?
这个答案描述了修改 PyInstaller 源代码以覆盖嵌入式清单创建。这还有必要吗?
我还在 GitHub 上遇到了一个似乎有同样问题的项目;此 PR的作者指出:
请注意,PyInstaller 还不了解该
longPathAware
设置并将其从清单中删除。
我不知道这是否属实,但我认为它确实为这是一个错误提供了一些分量。
我正在使用 PyInstaller 3.6、Python 3.7.2 和 Windows 10 版本 1809。
windows-10 - Net.Framework 4.7.2 和 Windows 10 中的长路径支持
为了解决路径限制为 255 个字符的问题,做了以下工作:
- Windows 10 2004 在“本地计算机策略”中包含“启用 Win32 长路径”。
- 在注册表分支中:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem
setLongPathsEnabled
= 1 - 在 VS (Net.Framework 4.7.2) 中创建了一个项目
- 添加了清单文件 (app.manifest),包括
longPathAware
. - 片段
<AppContextSwitchOverrides value = "Switch.System.IO.UseLegacyPathHandling = false; Switch.System.IO.BlockLongPaths = false" />
被添加到 App.Config
但是PathToLong
在使用时仍然会发生异常System.IO
applescript - Mac 的 Automator 可以扫描文件夹内容并列出超过一定长度的文件吗?
我在一所大学从事媒体制作工作,我们在 Mac 系统上工作,但我们的服务器是基于 Windows 的。将生产文件传输到服务器时,非法字符和长文件名给我们带来了问题。
为了防止文件传输失败并被发送到我们 DAM 系统中的握笔,我正在寻找创建一个简单的 Automator 应用程序,生产团队可以使用它来执行以下操作;
- 接受源文件夹作为应用程序的输入。
()\/[]"*?<>|+
扫描内容并用下划线替换以下字符。- 扫描内容 & 寻找超过 100 个字符的文件名
- 记录/报告受影响的文件,供我们的生产者修改。
在 Automator 中,我已经成功地使用查找和替换规则替换了非法字符,但我不确定检查文件名长度和报告所有更改所需的苹果脚本。
如果有人能够建议前进的路线,我将永远感激不尽!