[英]Extracting files from zip file in c++ using COM
我一直在寻找一种将文件压缩在一起以通过Web服务发送并在收到文件后将其提取的方法。 我在http://www.codeproject.com/Articles/280650/Zip-Unzip-using-Windows-Shell中找到了显示的代码。 将文件放入zip文件夹的代码可以正常工作,它是:
BSTR source = L"C:\\Users\\...\\Desktop\\test1.txt\0\0";
BSTR dest = L"C:\\Users\\...\\Desktop\\test.zip\\\0\0";
HRESULT hResult;
IShellDispatch *pISD;
Folder *pToFolder = NULL;
VARIANT vDir, vFile, vOpt;
CoInitialize(NULL);
hResult = CoCreateInstance
(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pISD);
if (SUCCEEDED(hResult))
{
VariantInit(&vDir);
vDir.vt = VT_BSTR;
vDir.bstrVal = dest;
// Destination is our zip file
hResult = pISD->NameSpace(vDir, &pToFolder);
if (SUCCEEDED(hResult))
{
// Now copy source file(s) to the zip
VariantInit(&vFile);
vFile.vt = VT_BSTR;
vFile.bstrVal = source;
VariantInit(&vOpt);
vOpt.vt = VT_I4;
vOpt.lVal = FOF_NO_UI;
// Copying and compressing the source files to our zip
hResult = pToFolder->CopyHere(vFile, vOpt);
Sleep(1000);
pToFolder->Release();
}
pISD->Release();
}
CoUninitialize();
从zip文件中提取文件的代码不是这样的:
BSTR source = L"C:\\Users\\...\\Desktop\\test1.zip\\\0\0";
BSTR dest = L"C:\\Users\\...\\Desktop\\unzipto\\\0\0";
HRESULT hResult;
IShellDispatch *pISD;
Folder *pToFolder = NULL;
VARIANT vDir, vFile, vOpt;
CoInitialize(NULL);
hResult = CoCreateInstance
(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pISD);
if (SUCCEEDED(hResult))
{
VariantInit(&vDir);
vDir.vt = VT_BSTR;
vDir.bstrVal = dest;
// Destination is our zip file
hResult = pISD->NameSpace(vDir, &pToFolder);
if (SUCCEEDED(hResult))
{
Folder *pFromFolder = NULL;
VariantInit(&vFile);
vFile.vt = VT_BSTR;
vFile.bstrVal = source;
pISD->NameSpace(vFile, &pFromFolder);
FolderItems *fi = NULL;
pFromFolder->Items(&fi); //----Fails Here!-----
VariantInit(&vOpt);
vOpt.vt = VT_I4;
vOpt.lVal = FOF_NO_UI; // Do not display a progress dialog box
// Creating a new Variant with pointer to FolderItems to be copied
VARIANT newV;
VariantInit(&newV);
newV.vt = VT_DISPATCH;
newV.pdispVal = fi;
hResult = pToFolder->CopyHere(newV, vOpt);
Sleep(1000);
pFromFolder->Release();
pToFolder->Release();
}
pISD->Release();
}
CoUninitialize();
程序在pFromFolder->Items(&fi);
处失败pFromFolder->Items(&fi);
。
在运行程序之前,存在目标文件夹“ unzipto”。 另外,尝试在“文件夹”变量中查找任何内容也非常棘手,因为google会带回除我正在寻找的内容以外的所有内容。
有没有人可以阐明这一点,甚至可以告诉我为什么会发生这种情况?
好了,在几乎疯狂地尝试找出原因之后,我意识到我为源文件使用了错误的文件名。 我使用的是test1.zip而不是test.zip,每次阅读都错过了! 就那么简单.......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.