Мне нужно разархивировать файл, который находится в базовом каталоге, например sample.zip. Я сделал образец приложения для этого. У меня есть 1 входной параметр - каталог назначения. Вот примеры кода:Ошибка аргумента разворачивания zip-файла с помощью оболочки
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);
}
А вот функция, которая должна извлечь файл почтового индекса:
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 равно null; кажется, что SrcFolder инициализирован, но DestFlder - нет. Единственное различие, которое я могу найти, заключается в том, что у DestFlder нет последующего расширения файла, но поскольку это папка, у него не должно быть ни одного.
Может ли кто-нибудь объяснить мне, что я сделал не так, и как это исправить?
Можете ли вы использовать свой отладчик для определения того, какой объект (DestFlder, items) имеет значение null, если таковое имеется? И в то время как оболочка делает это для вас интересной проблемой, может быть проще использовать библиотеку unzip, например. SharpZipLib – Rup
DestFlder показывает как null и дает мне сообщение об ошибке «Нет дополнительной информации об этом объекте». Хорошо 20 - это int, поэтому эта проблема должна быть проблемой: D – TheBW
Посмотрите на свой код, в котором у вас есть + = "\" + "\\", в строке zip = currentdir + "\\" + ". zip "; // Путь к zip-файлу, возможно, вы добавляете дополнительную« \ »отладку и убедитесь, что то, что вы ищете, находится в следующей строке currentdir = Directory.GetCurrentDirectory(); // Возвращает текущий каталог string zip = currentdir + "\\" + "sample.zip"; // Путь к zip-файлу, возможно, у вас есть некоторые проблемы с Path. – MethodMan