2016-12-04 73 views
1

我想解壓縮.zip文件,在指定的位置。用戶輸入要解壓縮的文件的名稱,如「D:\\ folder \\ sample.zip」。我利用拉鍊頭和.cpp文件從該鏈接https://www.codeproject.com/articles/7530/zip-utils-clean-elegant-simple-c-win無法解壓文件到一個文件夾

現在下面是我的代碼

int main() 
{ 
    char filename[100]; 
    HZIP hz; DWORD writ; 
    printf("Enter filename: \n"); 
    gets(filename); 
    TCHAR *name = (TCHAR *) filename; 
    hz = OpenZip(name,0); 
    SetUnzipBaseDir(hz,_T("D:\\unzipped\\")); 
    ZIPENTRY ze; 
    GetZipItem(hz,-1,&ze); 
    int numitems=ze.index; 
    for (int zi=0; zi<numitems; zi++) 
    { 
     GetZipItem(hz,zi,&ze); 
     UnzipItem(hz,zi,ze.name); 
    } 
    CloseZip(hz); 
    printf("Unzipped\n"); 
    return 0; 
} 

我需要採取的文件名作爲來自用戶的輸入,爲此我不得不強制轉換它通過使用此聲明

TCHAR *name = (TCHAR *) filename; 

但是,這是現在造成問題的聲明。當我調試程序並添加手錶到變量'名稱'時,我看到在類型轉換後,它存儲了一些中文字母,而不是zip文件的路徑

以前的代碼工作正常時,而不是從用戶,我硬編碼的路徑和文件名下面

hz = OpenZip(_T("D:\\folder\\sample.zip"),0); 

任何想法,提到我究竟做錯了什麼?

+0

可能有幫助:http://stackoverflow.com/questions/4826189/convert-char-to-wchar-in-c –

+0

不是真的@ASH – user52327

+0

你會試試這個:'wstring filename; std :: wcin >>文件名; OpenZip(filename.c_str(),0);' –

回答

0

Windows文件系統(NTFS,FAT32)使用Unicode編碼文件名(UTF16)。這就是爲什麼OpenZip API需要wchar_t *(寬字符字符串)作爲文件名參數。

C++標準提供了一個wstring類類似於ANSI字符串(或C字符串)是應該包含Unicode字符,以及用於在Unicode編碼的輸入/輸出一wcinwcout流。

wstring wfilename; 
std::wcin >> wfilename; 
OpenZip(wfilename.c_str(), 0); // c_str() retrives the wchar_t* in the buffer, much similarly to the ANSI `string. 

編輯: 因爲你需要輸入到C風格的緩衝,這裏是一個C風格的char []轉換到的wstring和wchar_t的[]最簡單的方法:

char filename[100]; printf("Enter filename: \n"); cin >> filename; 

// conversion 
std::wstring wFilename(strlen(filename), L' '); 
std::copy(filename, filename + wFilename.length(), wFilename.begin()); 


OpenZip(wFilename.c_str(), 0); 
+0

有沒有什麼辦法可以將我的char文件名[100]轉換爲wstring?由於我必須在字符數組中輸入一定的限制:/ – user52327

+0

@ user52327,請參閱此轉換的編輯。 –

+0

這是完美的!也感謝您的解釋,真的很感激它 – user52327

相關問題