Мне нужно распаковать файл, который находится в базовой директории, например, 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 не имеет следующего расширения файла, но, поскольку это папка, у него все равно не должно быть.
Может кто-нибудь объяснить мне, что я сделал не так и как это исправить?