对不同Windows版本的大文件名(压缩)进行编程截断

所以我修正了一个程序,允许用户创build一个Excel文档,在提供给客户之前,它首先压缩。 客户抱怨的一个问题是,虽然zip文件可以随时下载,但是有时用户必须使用标准的Windows压缩工具将Excel文件复制出档案(或者解压缩),然后才能打开它。 标准的“文件名太长”的错误。

当然,algorithm是将.zip存档名称设置为与报表相同 – 可以是长度超过100个字符的string。

我正在执行的解决scheme是检查潜在报告的长度,以便在违反MAX_PATH的情况下自然查看,并根据需要截断.zip名称。

在Windows 7上testing它,这是完美的。 但是当在8.1下testing时会发生一些奇怪的事情

它仍然会抛出一个错误,试图从档案打开 – 但这个错误是更神秘的。

“对不起,我们找不到C:\ Users {我的用户名} \ AppData \ Local \ Temp \ Temp1_ {剩余的被截断的压缩文件名} .zip {Full file name} .xlsx。是否有可能被移动,改名或删除?

无论文件在浏览器中是“打开”还是“保存”,该错误都会popup。

通常情况下,我只是尝试进一步调整,但在Windows 8.1平台上进行testing涉及到很多开销,看起来问题不是path名称长度。

到底是怎么回事? Windows 8是否存在档案中的名称长度问题,或…?

另外,我在这里发布的原因,而不是说,用户体验,是因为我觉得解决scheme将是程序化的 – 在程序的代码。 我承认“让最终用户跳过提取button”是为了提供简单的用户体验,但是截断整个path的长度解决了Windows 7上的问题。

只是不是8.1,search的SO网站家庭没有提供任何帮助 – 讽刺的是,由于关键字Excel。

所以,正如我在上面的链接( http://answers.microsoft.com/en-us/office/forum/office_2013_release-excel/sorry-unable-to-find/595333d0-1463-499f-967e-4da8ac2e2047? auth = 1 )症结似乎是这样,尽pipeMAX_PATH是260个字符,但Excel 2013不能处理超过212的任何内容。

我仍然无法给出应有的严格testing,但是如果有其他人遇到这个问题,并且发现这个页面正在寻求修复,那么就截断整个path,直到整个path在212以下,并且你应该是好的。