Изменение расширения, распаковать, удалить zip, объединить новую папку - PullRequest
0 голосов
/ 22 марта 2020

У меня есть уникальное расширение файла, которое на самом деле просто почтовый индекс. Я пытаюсь в одном случае изменить имя расширения, извлечь файлы, а затем объединить их все в один файл.

Я могу переместить файл, изменить расширение, но оно на этом останавливается. Это не будет извлекать файлы. Я пытался поставить Thread.Sleep(10000), думая, что, возможно, он не видел молнии, потому что они все еще копировали, но это тоже не сработало.

string path = txtField.text;
string[] originalFiles = Directory.GetFiles(path, "*.unique");
string[] newZips = Directory.GetFiles(path, "*.zip");
try
{
    foreach (var item in originalFiles)
    {
        File.Copy(item, Path.ChangeExtension(item, ".zip"));
    }
    foreach (var item in newZips)
    {
        ZipFile.CreateFromDirectory(path, item);
        Zipfile.ExtractToDirectory(item, path);
    }
}
catch (exception ex)
{
    MessageBox.Show(ex.Message, "Fail....");
}

1 Ответ

2 голосов
/ 22 марта 2020

Проблема в том, что newZips устанавливается перед тем, как вы на самом деле создаете переименованные файлы zip. Вам нужно будет переместить строку:

string[] newZips = Directory.GetFiles(path, "*.zip");

.., чтобы она появлялась после первого foreach l oop.

Если ваша конечная цель - создать только новый почтовый индекс с содержимое файлов * .unique, возможно, вы можете избежать переименования файлов. Вы можете сделать что-то похожее на следующее, чтобы извлечь файлы во временную папку и создать новый zip из этих файлов:

string path = txtField.text;
string[] originalFiles = Directory.GetFiles(path, "*.unique");

try
{
    var extractedFilesPath = Path.Combine(path, "ExtractedFiles");
    var newZipFile = Path.Combine(path, "NewZipFile.zip");

    foreach (var item in originalFiles)
    {
        ZipFile.ExtractToDirectory(item, extractedFilesPath);
    }

    ZipFile.CreateFromDirectory(extractedFilesPath, newZipFile);

    Directory.Delete(extractedFilesPath, true);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Fail....");
}
...