Ошибка аргумента при распаковке zip-файла с помощью оболочки - PullRequest
1 голос
/ 20 февраля 2012

Мне нужно распаковать файл, который находится в базовой директории, например, sample.zip. Я сделал пример приложения для этого. У меня есть 1 входной параметр - каталог назначения. Вот примеры кода:

private void BInstall_Click(object sender, EventArgs e)
{
    string currentdir = Directory.GetCurrentDirectory();//Gets current directory
    string zip = currentdir + "\\" + "sample.zip";//Path to zip file
    string outPath = TBoutputPath.Text;
    exctract(zip ,outPath );
}

А вот функция, которая должна извлекать zip-файл:

void exctract(string name, string path)
{
    string[] args = new string[2];
    if (name.IndexOf(" ") != -1)
    {
        //we got a space in the path so wrap it in double qoutes
        args[0] += "\"" + name + "\"";
    }
    else
    {
        args[0] += name;
    }

    if (path.IndexOf(" ") != -1)
    {
        //we got a space in the path so wrap it in double qoutes
        args[1] += " " + "\"" + path + "\"";
    }
    else
    {
        args[1] +=path;
    }

    Shell32.Shell sc = new Shell32.Shell(); 
    Shell32.Folder SrcFlder = sc.NameSpace(args[0]);
    Shell32.Folder DestFlder = sc.NameSpace(args[1]);
    Shell32.FolderItems items = SrcFlder.Items();
    DestFlder.CopyHere(items , 20); 
}

В DestFlder.CopyHere(items , 20); я получаю исключение NullReferenceException, и я не знаю почему, поскольку объекты не должны быть нулевыми. Это DestFlder, который является нулевым; похоже, что SrcFolder инициализирован, а DestFlder - нет. Единственное отличие, которое я могу найти, заключается в том, что DestFlder не имеет следующего расширения файла, но, поскольку это папка, у него все равно не должно быть.

Может кто-нибудь объяснить мне, что я сделал не так и как это исправить?

1 Ответ

1 голос
/ 21 февраля 2012

Ответ на эту проблему был довольно ... тривиальным, но, как и все самые простые проблемы, почти невозможно представить.

Папка не существует, и на нее нельзя ссылаться.Этот фрагмент кода исправил следующее:

        if (!Directory.Exists(args[1]))
            Directory.CreateDirectory(args[1]);

Вы, DJ KRAZE, указали на другую проблему со скриптом, которая могла привести к ошибке во время выполнения.Спасибо за это!

...