簡體   English   中英

使用COM從C ++中的zip文件中提取文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM