C++ 无法将文件解压缩到文件夹
我正在尝试在指定位置解压.zip文件。用户输入要解压缩的文件名,如“D:\\folder\\sample.zip”。我正在使用此链接中的zip标题和.cpp文件 下面是我的代码C++ 无法将文件解压缩到文件夹,c++,zip,C++,Zip,我正在尝试在指定位置解压.zip文件。用户输入要解压缩的文件名,如“D:\\folder\\sample.zip”。我正在使用此链接中的zip标题和.cpp文件 下面是我的代码 int main() { char filename[100]; HZIP hz; DWORD writ; printf("Enter filename: \n"); gets(filename); TCHAR *name = (TCHAR *) filename; hz
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;
}
但这正是造成问题的原因。当我调试程序并将watch添加到变量“name”中时,我看到在输入后,它存储了一些中文字母,而不是zip文件的路径
以前,当我没有从用户那里获取输入时,代码工作得很好,我硬编码了路径和文件名,如下所述
hz = OpenZip(_T("D:\\folder\\sample.zip"),0);
知道我做错了什么吗?Windows文件系统(NTFS、FAT32)用Unicode(UTF16)编码文件名。这就是为什么OpenZip
API希望使用wchar\u t*(宽字符字符串)作为文件名参数的原因
C++标准提供了类似于假定包含Unicode字符的ANSI字符串(或C字符串)和<代码> > WCIN < /Code >和 WcOUT流输入/输出的Unicode编码的<>代码> WString
类。p>
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);
Windows文件系统(NTFS、FAT32)以Unicode(UTF16)编码文件名。这就是为什么OpenZip
API希望使用wchar\u t*(宽字符字符串)作为文件名参数的原因
C++标准提供了类似于假定包含Unicode字符的ANSI字符串(或C字符串)和<代码> > WCIN < /Code >和 WcOUT流输入/输出的Unicode编码的<>代码> WString
类。p>
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);
可能有帮助:不是真的@A.S.h您能试试这个:
wstring filename;std::wcin>>文件名;OpenZip(filename.c_str(),0)代码>太好了。它就像一个符咒!你能解释一下这是怎么回事吗@A.S.HAny知道我做错了什么<代码>TCHAR*名称=(TCHAR*)文件名代码>如果char与TCHAR不同,则这是一个错误。强制转换会使编译器静音,但不会修复问题。可能有帮助:不太可能@A.S.h是否尝试以下操作:wstring filename;std::wcin>>文件名;OpenZip(filename.c_str(),0)代码>太好了。它就像一个符咒!你能解释一下这是怎么回事吗@A.S.HAny知道我做错了什么<代码>TCHAR*名称=(TCHAR*)文件名代码>如果char与TCHAR不同,则这是一个错误。强制转换会使编译器静音,但无法解决问题。是否有任何方法可以将我的char文件名[100]转换为wstring?因为我必须在字符数组中接受输入有一定的限制:/这太完美了!也谢谢你的解释,真的很感激it@user52327我很高兴它有帮助:)有没有办法将我的char文件名[100]转换成wstring?因为我必须在字符数组中接受输入有一定的限制:/这太完美了!也谢谢你的解释,真的很感激it@user52327我很高兴这有帮助:)