FindFirstFile()函数用法

FindFirstFile()函数用法 请教高手
最近用FindFirst()检测文件的存在性总是失败,有以下几个问题望高手们回答一下:
1,在Vs2005中关于FindFirst()函数用两种FindFirstFileA(),FindFirstFileW(),定义于Winbase.h中.而在VS20005的MSDN中却只有一种(其实就是FindFirstFileW()),请问两个函数干嘛的,有什么区别.
2,对于LPCTSTR,LPCWSTR,LPCSTR它们与char的关系,能不能直接用强制转化如:(LPCWSTR) "filepath).
看了半天MSDN还是不懂what   is   the   "String   Conversion   Macros "?
3,用Windows   ATI   函数怎么检测文件的存在与否?

------解决方案--------------------
FindFirstFileA() 一个ASCII
FindFirstFileW( ) 个是nuicode 宽字符集

所用的字符集不一样,好像是这么说。

//刚看到。记得不是很清楚



------解决方案--------------------
1.1楼回答了

2.
http://www.vckbase.com/document/viewdoc/?id=1082
看那张表格

3.就是用CFileFind啊
------解决方案--------------------
在预编译选项里设置unicode还是多字符集
WideCharToMultiByte
MultiByteToWideChar
------解决方案--------------------
建议先看一下Windows核心编程,中ANSI和Unicode的区别

#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE

LPCSTR = const char *(8-bit Windows (ANSI) )
LPCWSTR(16-bit Unicode characters)
LPCTSTR 解释An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.


判断文件是否存在
用FindFirstFile就可以

#include "windows.h "

int
main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

printf ( "Target file is %s.\n ", argv[1]);

hFind = FindFirstFile(argv[1], &FindFileData);

if (hFind == INVALID_HANDLE_VALUE) {
printf ( "Invalid File Handle. Get Last Error reports %d\n ", GetLastError ());
} else {
printf ( "The first file found is %s\n ", FindFileData.cFileName);
FindClose(hFind);
}

return (0);
}


------解决方案--------------------
FindFirstFileA 是ASCII版的,简单的说,不能有中文在参数中,而FindFirstFileW是Unicode版的,它可以包含非ASCII的参数,但是即使包含ASCII中的那些字符,那也得2个byte表示一个字符。

LPCTSTR, const TCHAR*; 除了编译器字符集设置,一般情况下要看你是否指定UNICODE宏,指定TCHAR就代表wchar_t, 否则char.
LPCWSTR= const wchar_t*;
LPCSTR= const char*;
不能直接用强制转化如:(LPCWSTR) "filepath).因为他们不是一种字符类型,因为typedef unsigned short wchat_t;

你使用CreateFile or OpenFile尝试着打开文件,如果不存在,会返回结果指示的。