Распакуйте файлы с подкаталогами в корневую папку - PullRequest
0 голосов
/ 08 декабря 2018

Мне нужна помощь.

У меня просто есть этот код прямо сейчас.Этот код работает, но этого недостаточно.

Мой код;

DirectoryInfo dirFile = new DirectoryInfo(currentDir);
FileInfo[] infoFile = dirFile.GetFiles("*.zip", SearchOption.AllDirectories);

foreach (FileInfo currentFile in infoFile)
{
    using (ZipFile zipFile = ZipFile.Read(currentFile.FullName))
    {
        zipFile.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(unZipFiles_ExtractProgressChanged);
        foreach (ZipEntry currentZip in zipFile)
        { currentZip.Extract(currentFile.DirectoryName, ExtractExistingFileAction.OverwriteSilently); }
    }
    currentCount = increaseCount + 1; increaseCount = currentCount;
    if (downloadType == 1) { bar2SetProgress((ulong)currentCount, (ulong)totalCount); }
    lblFileName.Text = currentFile.Name;
}

Я хочу извлечь все zip-файлы в папку Application.StartupPath из папки _ZipFiles со всеми подкаталогами.

Вот один пример;

У меня есть одна папка zip.Имя: _ZipFolder

До процесса распаковки;

Application.StartupPath\_ZipFiles\startProgram.zip
Application.StartupPath\_ZipFiles\updateProgram.zip
Application.StartupPath\_ZipFiles\Pack\testDownload.zip
Application.StartupPath\_ZipFiles\Pack\Version\repo2.zip
Application.StartupPath\_ZipFiles\Pack\Version\newClass.zip
Application.StartupPath\_ZipFiles\Ack\Library\argSetup.zip
Application.StartupPath\_ZipFiles\Ack\learnMachine.zip
Application.StartupPath\_ZipFiles\Code\zipVersion4.zip

После процесса распаковки (я очень хочу этот экстракт);

Application.StartupPath\startProgram.exe
Application.StartupPath\updateProgram.exe
Application.StartupPath\Pack\testDownload.exe
Application.StartupPath\Pack\Version\repo2.cs
Application.StartupPath\Pack\Version\newClass.cs
Application.StartupPath\Ack\Library\argSetup.exe
Application.StartupPath\Ack\learnMachine.pdf
Application.StartupPath\Code\zipVersion4.exe

Все файлы необходимо переместить вApplication.StartupPath из папки _ZipFiles с подкаталогами.

Как это сделать?Пожалуйста, помогите мне.

Я надеюсь, вы понимаете, что я хочу.Я извиняюсь за мой плохой английский.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Удаляет имя папки zip из имени текущего каталога при извлечении

На основе текущего примера, где у вас есть _ZipFiles папка

DirectoryInfo dirFile = new DirectoryInfo(currentDir);
FileInfo[] infoFile = dirFile.GetFiles("*.zip", SearchOption.AllDirectories);

var zipFolderName = @"\_ZipFiles";

foreach (FileInfo currentFile in infoFile) {
    using (ZipFile zipFile = ZipFile.Read(currentFile.FullName)) {
        zipFile.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(unZipFiles_ExtractProgressChanged);
        var destination = currentFile.DirectoryName.Replace(zipFolderName, "");
        foreach (ZipEntry currentZip in zipFile) { 
            currentZip.Extract(destination, ExtractExistingFileAction.OverwriteSilently); 
        }
    }
    currentCount = increaseCount + 1; increaseCount = currentCount;
    if (downloadType == 1) { bar2SetProgress((ulong)currentCount, (ulong)totalCount); }
    lblFileName.Text = currentFile.Name;
}
0 голосов
/ 08 декабря 2018

Если я вас правильно понял, вы хотите извлечь все файлы в каталог Application.StartupPath, а не в подпапки.

Попробуйте изменить:

currentZip.Extract(currentFile.DirectoryName, ExtractExistingFileAction.OverwriteSilently);

на

currentZip.Extract(Application.StartupPath, ExtractExistingFileAction.OverwriteSilently);

Если Application.StartupPath не подходит, то, возможно, используйте AppDomain.CurrentDomain.BaseDirectory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...