2013-07-27 2 views
0

Я пытаюсь использовать DotNetZip обрабатывать почтовые файлы, но всякий раз, когда я пытаюсь открыть файл, я получаю следующее сообщение об ошибке:FileStream не откроет устройства Win32, такие как дисковые разделы и ленточные накопители. (DotNetZip)

[SEVERE] System.ArgumentException: FileStream will not open Win32 devices such as disk partitions and tape drives. Avoid use of "\\.\" in the path. 
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) 
at System.IO.FileStream..ctor(String path, FileMode mode) 
at Ionic.Zip.ZipEntry.InternalExtract(String baseDir, Stream outstream, String password) 
at Ionic.Zip.ZipEntry.Extract(String baseDirectory) 
at Ionic.Zip.ZipFile._InternalExtractAll(String path, Boolean overrideExtractExistingProperty) 
at Ionic.Zip.ZipFile.ExtractAll(String path) 
at ModsInstaller.Form1.MergeDirectories(String Path1, String Path2) in C:\Users\Admin\documents\visual studio 2010\Projects\ModsInstaller\ModsInstaller\Form1.cs:line 275 
at ModsInstaller.Form1.CustomInstallForge() in C:\Users\Admin\documents\visual studio 2010\Projects\ModsInstaller\ModsInstaller\Form1.cs:line 259 
at ModsInstaller.Form1.btn_install_Click(Object sender, EventArgs e) in C:\Users\Admin\documents\visual studio 2010\Projects\ModsInstaller\ModsInstaller\Form1.cs:line 120 

и вот код:

private void MergeDirectories(string Path1, string Path2) 
    { 
     string outDirectory = Path.GetFullPath(workspace + "\\temp\\dir"); 

     if (!Directory.Exists(outDirectory)) 
      Directory.CreateDirectory(outDirectory); 

     Path1 = Path.GetFullPath(Path1); 
     Path2 = Path.GetFullPath(Path2);    

     Log("Extracting {0} to temp dir.", Path1); 
     using (ZipFile zip = ZipFile.Read(Path1)) 
     { 
      zip.ExtractAll(outDirectory); //this line throws the error 
     } 
     Log("Extraction sucessfull"); 

     Log("Extracted {0} to temp dir.", Path2); 
     ZipFile.Read(Path2).ExtractAll(Path.GetFullPath(workspace + "\\temp\\dir")); 
     Log("Extraction sucessfull"); 

     ZipFile z = new ZipFile(workspace + "\\temp\\build.jar"); 
     z.AddDirectory(workspace + "\\temp\\dir"); 
     z.Save(); 
     z.Dispose(); 
    } 

и когда я вставляю точку останова, я вижу следующее:

outDirectory = "C:\\Users\\Admin\\documents\\visual studio 2010\\Projects\\ModsInstaller\\ModsInstaller\\bin\\Debug\\temp\\dir" 

Может ли кто-нибудь указать, что я делаю неправильно?

Спасибо.

ответ

1

Использование

MergeDirectories("Sample 1.zip", "Sample 2.zip", "Merged.zip"); 

Код:

private void MergeDirectories(string filePath1, string filePath2, string mergedName) 
    { 
     string workspace = Environment.CurrentDirectory; 
     filePath1 = Path.Combine(workspace, filePath1); 
     filePath2 = Path.Combine(workspace, filePath2); 
     mergedName = Path.Combine(workspace, mergedName); 

     if (File.Exists(mergedName)) 
     { 
      File.Delete(mergedName); 
     } 

     DirectoryInfo zip1 = OpenAndExtract(filePath1); 
     DirectoryInfo zip2 = OpenAndExtract(filePath2); 

     string merged = Path.GetTempFileName(); 
     using (ZipFile z = new ZipFile()) 
     { 
      z.AddDirectory(zip1.FullName); 
      z.AddDirectory(zip2.FullName); 
      z.Save(merged); 
     } 

     zip1.Delete(true); 
     zip2.Delete(true); 

     File.Move(merged, mergedName); 
    } 

    private DirectoryInfo OpenAndExtract(string path) 
    { 
     string tmpName = Path.GetFileNameWithoutExtension(Path.GetRandomFileName()); 
     string tmp = Path.Combine(Path.GetTempPath(), tmpName); 

     FileInfo sourcePath = new FileInfo(path); 
     DirectoryInfo tempPath = Directory.CreateDirectory(tmp); 

     using (ZipFile zip = ZipFile.Read(sourcePath.FullName)) 
     { 
      zip.ExtractAll(tempPath.FullName); 
     } 

     return tempPath; 
    } 
+0

С дальнейшими испытаниями я не могу показаться, чтобы воспроизвести вашу ошибку. Какова была ценность переменной 'workspace'? – jrbeverly

+0

huh, я скопировал ваш код, чтобы проверить его, но он все равно выдает ошибку. Значение рабочей области: «C: \\ Users \\ Admin \\ documents \\ visual studio 2010 \\ Projects \\ ModsInstaller \\ ModsInstaller \\ bin \\ Debug" – Doodles

+0

Какая ошибка? Это точно такая же ошибка, как и раньше? или какая-либо разница? – jrbeverly

Смежные вопросы