c++, output of FindFirstFile()
c++, output of FindFirstFile()
我用FindFirstFile(...)
函数编写了查找文件的程序。但是,当我尝试打印此函数的输出时,控制台窗口中打印了几个未知字符字符串。我读了一些帖子,有人写了尝试使用wcout
而不是cout
。我试过了,但无济于事。我认为,问题在于ANSI和UNICODE编码之间的差异。有人能帮我吗?我将非常感谢任何帮助!
这是我的代码:
#include "FindFile.h"
#include <iostream>
using namespace std;
void FindFileCl::Execute(Input * input, Response * response )
{
WIN32_FIND_DATAA FindFileData;
HANDLE h = FindFirstFileA((input->FileName).c_str(), // name of the file
&FindFileData);
if (h)
{
cout << "Search Results:n";
cout<<(FindFileData.cFileName);
CloseHandle(h);
}
else
{
cerr << "File is NOT found:" << GetLastError() << "n";
}
}
如果FindFirstFile()
失败,则返回INVALID_HANDLE_VALUE
,而不是NULL
:
如果函数失败或无法从
lpFileName
参数中的搜索字符串中定位文件,则返回值为INVALID_HANDLE_VALUE
,并且lpFindFileData
的内容不确定。要获取扩展的错误信息,请调用GetLastError
函数。
并且CCD_ 11是CCD_ 12d作为CCD_
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
意味着if (h)
将被输入成功或失败。如果发生故障,cFileName
将不会被修改,从而导致打印垃圾,因为它没有初始化。更改if
条件以明确检查INVALID_HANDLE_VALUE
:
if (h != INVALID_HANDLE_VALUE)
{
}
"最不坏"的方法之一是将Unicode名称转换为控制台的编码。
为此,我建议使用Unicode编译(Visual Studio中有一个项目选项>=8;否则您必须手动定义UNICODE
和_UNICODE
),使用FindFirstFile()的TCHAR版本,然后使用CharToOem()或CharToOemBuff()(两者都不完美)或者,使用W版本,后跟WideCharToMultiByte(CP_OEMCP)。
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 传递 std::vector of std::shared_ptr,而不是更新对象
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- c++, output of FindFirstFile()