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尝试着打开文件,如果不存在,会返回结果指示的。
最近用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尝试着打开文件,如果不存在,会返回结果指示的。