“父目录访问者”是什么意思?

时间:2014-07-29 18:09:06

标签: c# compression

我正在尝试使用ZipFile.ExtractToDirectory(zipFile, extractPath);从C#中的文件夹中提取文件,如示例部分中http://msdn.microsoft.com/en-us/library/hh485723(v=vs.110).aspx所述。它不断抛出异常"提取Zip条目会导致指定目标目录之外的文件。"对于这个例外,微软说"如果条目名称包含父目录访问器,则可能会发生这种情况。"我不知道这是什么意思。我尝试将zipFile,extractPath更改为完全不同的地方,但仍然不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

我相信父目录访问器是“。”路径中的“..”字符分别指定当前和以前的目录。你的extractPath ..\Folder中是否有任何一个?{/ p>

答案 1 :(得分:3)

问题可能在于zip文件,而不是您的代码。可以创建一个zip文件,其相对位置从创建zip文件的目录向上,例如:

"C:\Program Files (x86)\GnuWin32\bin\zip.EXE" d:\bar.zip ..\*

在这种情况下,zip文件实际上在相对路径信息中包含“.. \”。

听起来似乎ZipFile.ExtractToDirectory()拒绝解压缩这样的zip文件,可能出于安全原因(即解压缩此类文件的Web服务器可能会发现自己覆盖目标目录之外的文件!)事实上,如果我尝试要在Windows shell中使用ExtractAll打开这样的zip文件,我收到此错误:

enter image description here

您至少可以在7zip中打开这些文件以查看是否发生这种情况(实际上7zip将从我使用上述命令创建的疯狂zip文件中提取文件。)

如果在创建zip文件时,将目录更改为父目录,而不是压缩父目录,那么一切都应该正常。即:

pushd .. & "C:\Program Files (x86)\GnuWin32\bin\zip.EXE" d:\bar5.zip * & popd

将创建一个Windows喜欢的zip文件,因为zip将在运行时创建相对于当前目录的zip文件。