利用FindFirstFile()和FindNextFile()历遍文件夹的有关问题

利用FindFirstFile()和FindNextFile()历遍文件夹的问题
int main()
{
int FileNumber=0;
bool next=true;
LPCTSTR lpFileName=L".\\*.*";
WIN32_FIND_DATA FileData;
HANDLE hFind;
hFind = FindFirstFile(lpFileName,&FileData);
++FileNumber;
if(hFind == INVALID_HANDLE_VALUE) return 0;
while(next)
{
wcout<<'#'<<setw(3)<<setiosflags(ios::left)<<FileNumber<<' '<<FileData.cFileName<<endl;
next = FindNextFile(hFind,&FileData);
++FileNumber;
}
system("pause");
return 0;
}

Q1:hFind == INVALID_HANDLE_VALUE 这个情况什么时候会出现,即使是空文件夹也不会返回这个值。
Q2:每次都会返回 “.” 和 “..” 这两个文件名,各代表什么意思?
Q3:如何判断文件夹和无后缀的文件,即得到文件名"AAAA",我如何知道AAAA是一个文件或是一个文件夹?
Q4:如何输出包含中文的文件名?上述代码无法输出中文。

问题略多了点,还望大家不吝赐教~

------解决方案--------------------
参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx
http://pegasus827.bokee.com/6312983.html
------解决方案--------------------
一,应该是没找到路径。 二、跟目录和上一级目录。三、钱和钱包的区别。四、unicode

小菜自己的理解
------解决方案--------------------
3、::GetFileAttributes(strFile)   &  FILE_ATTRIBUTE_DIRECTORY;
如果不为0则为文件夹,否则文件。
4、locale loc=locale::global(locale(".936"));
------解决方案--------------------
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt");
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
system("dir /b /ad  c:\\*.* >d:\\alldirs.txt");
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。