C# 压缩前缀为\\?\的长文件会导致压缩存档无效
我正在尝试压缩非常长的文件。我读过其他一些帖子,它们说你应该在长文件名前面加上“\\?\”前缀,这样才能起作用。这当然可以让压缩过程正常完成。但是,在解压缩文件时,我会收到错误“invalid file\\?\myfile.txt”。这意味着它实际上是用一个预先挂起的长文件名指示器压缩我的文件。压缩可以用长文件名完成吗C# 压缩前缀为\\?\的长文件会导致压缩存档无效,c#,zip,C#,Zip,我正在尝试压缩非常长的文件。我读过其他一些帖子,它们说你应该在长文件名前面加上“\\?\”前缀,这样才能起作用。这当然可以让压缩过程正常完成。但是,在解压缩文件时,我会收到错误“invalid file\\?\myfile.txt”。这意味着它实际上是用一个预先挂起的长文件名指示器压缩我的文件。压缩可以用长文件名完成吗 using (ZipArchive zip = ZipFile.Open(zipfinalpath, ZipArchiveMode.Create)) { for (int
using (ZipArchive zip = ZipFile.Open(zipfinalpath, ZipArchiveMode.Create))
{
for (int i = 0; i < fullfilepaths.Count; i++)
{
zip.CreateEntryFromFile(fullfilepaths[i], zipfilepaths[i]);
}
}
使用(ZipArchive zip=ZipFile.Open(zipfinalpath,ZipArchiveMode.Create))
{
for(int i=0;i
Windows文件名中的最大字符数限制为260个字符。在.NET 4.6.2及更高版本中,不再抛出PathTooLong
异常。因此,您的代码工作正常。阅读更多
在4.6.2中,如果看到路径,我们将不再抛出PathTooLongException
即>=最大路径。如果操作系统不喜欢它,我们会浮出水面
操作系统返回错误(可能是PathToolLong),但我们不会
再猜猜操作系统会做什么
在本地组策略编辑器中,您可以“启用Win32长路径”,这样它就不会被截断
有一个图书馆是为克服这些问题而编写的。看 根据图书馆信息: 此库是专门为克服.NET Framework使用长路径和文件名的限制而编写的。使用此库,您可以通过编程方式浏览、访问、写入、删除System.IO命名空间无法访问的文件和文件夹等。Delimon.Win32.IO取代System.IO的基本文件功能,支持最多32767个字符的文件和文件夹名。 此库是在.NET Framework 4.0上编写的,可以在x86和x64系统上使用
你的路径长度是否超过250个字符;很遗憾,我无法改变。谢谢凯尔。我将我的项目转移到4.7.2,并删除了\?\前缀。但是现在ZipArchive说:System.IO.DirectoryNotFoundException:'找不到路径'C:\excessivelylongfilename.txt'的一部分。如果整个路径'C:\excessivelylongfilename.txt'包含在异常中,那么这可能是一个单独的问题。它是。我想知道Windows用于搜索该文件的任何进程是否会在该进程内截断它。我将该文件名复制粘贴到文件资源管理器中,很容易找到它。我只是验证了我仍然无法更改过长文件名的名称,因为该文件名太长,尽管更改了我的组策略以允许处理长文件名。修改了答案以包括“Delimon library”选项,它是一个基于Microsoft TechNet的.NET Framework 4库,用于克服长文件名问题。支持最多32767个字符的文件和文件夹名称。