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 函数怎么检测文件的存在与否?
15 个解决方案
#1
FindFirstFileA() 一个ASCII
FindFirstFileW( ) 个是nuicode 宽字符集
所用的字符集不一样,好像是这么说。
//刚看到。记得不是很清楚
FindFirstFileW( ) 个是nuicode 宽字符集
所用的字符集不一样,好像是这么说。
//刚看到。记得不是很清楚
#2
有没有高手回答清楚一点
拜托
拜托
#3
1.1楼回答了
2.
http://www.vckbase.com/document/viewdoc/?id=1082
看那张表格
3.就是用CFileFind啊
2.
http://www.vckbase.com/document/viewdoc/?id=1082
看那张表格
3.就是用CFileFind啊
#4
建议你看下上面网页那篇文章
#5
在预编译选项里设置unicode还是多字符集
WideCharToMultiByte
MultiByteToWideChar
WideCharToMultiByte
MultiByteToWideChar
#6
建议先看一下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);
}
#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);
}
#7
to yztgx(静风)
上叙程序,编译时有问题:error C2664: “FindFirstFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”
如改为: hFind=FindFirstFile((LPCWSTR)argv[1],&FindFileData);
可以运行,但存在的文件也被检测为不存在。
说明(LPCWSTR)强制转化出了问题.
那么对于这一问题该怎么解决了?
上叙程序,编译时有问题:error C2664: “FindFirstFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”
如改为: hFind=FindFirstFile((LPCWSTR)argv[1],&FindFileData);
可以运行,但存在的文件也被检测为不存在。
说明(LPCWSTR)强制转化出了问题.
那么对于这一问题该怎么解决了?
#8
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尝试着打开文件,如果不存在,会返回结果指示的。
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尝试着打开文件,如果不存在,会返回结果指示的。
#9
在要使用LPCWSTR的地方,用L"aaaaaa"形式, 比如你应该使用L"filepath".
#10
Thanks very much,I understand now!!!
#11
不好意思,分数有限,就这样给吧,真的很感谢大家哦!
#12
最近用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 函数怎么检测文件的存在与否?
---------------------------------------
1: FindFirstFileA 和 FindFirstFileW 一个是对应Ansi字符集,一个对应Unicode字符集, 你的工程到底使用那一个决定于你的设置,是否定义了UNICODE预编译宏。FindFirstFileA 和 FindFirstFileW对外的接口统一为FindFirstFile,
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE
注意:FindFirstFileA是通过FindFirstFileW来实现的,就是在内部调用FindFirstFileW前后调用字符集转换程序实现的。
现在知道Windows API中总多A和W函数的区别了吧!
2:TChar 和 char的区别, 还是unicode与 ansi的区别,如果的定义了unicode TCHAR 就是WCHAR, 否则就是char。
LPCTSTR 就是long pointer of Const TChar string
LPCWSTR 就是long Pointer of Const WChar string
LPCSTR 就是Long Pointer of Const string
能不能转换,看你的工程设置,归根到底WCHAR是short,char是BYTE,TCHAR是通用数据,可以自动编译为short或BYTE
3:你的方法也可以检测啊,如果返回true就存在呗
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 函数怎么检测文件的存在与否?
---------------------------------------
1: FindFirstFileA 和 FindFirstFileW 一个是对应Ansi字符集,一个对应Unicode字符集, 你的工程到底使用那一个决定于你的设置,是否定义了UNICODE预编译宏。FindFirstFileA 和 FindFirstFileW对外的接口统一为FindFirstFile,
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE
注意:FindFirstFileA是通过FindFirstFileW来实现的,就是在内部调用FindFirstFileW前后调用字符集转换程序实现的。
现在知道Windows API中总多A和W函数的区别了吧!
2:TChar 和 char的区别, 还是unicode与 ansi的区别,如果的定义了unicode TCHAR 就是WCHAR, 否则就是char。
LPCTSTR 就是long pointer of Const TChar string
LPCWSTR 就是long Pointer of Const WChar string
LPCSTR 就是Long Pointer of Const string
能不能转换,看你的工程设置,归根到底WCHAR是short,char是BYTE,TCHAR是通用数据,可以自动编译为short或BYTE
3:你的方法也可以检测啊,如果返回true就存在呗
#13
Thank you.
#14
mark
#15
不错,很有用,记下了
#1
FindFirstFileA() 一个ASCII
FindFirstFileW( ) 个是nuicode 宽字符集
所用的字符集不一样,好像是这么说。
//刚看到。记得不是很清楚
FindFirstFileW( ) 个是nuicode 宽字符集
所用的字符集不一样,好像是这么说。
//刚看到。记得不是很清楚
#2
有没有高手回答清楚一点
拜托
拜托
#3
1.1楼回答了
2.
http://www.vckbase.com/document/viewdoc/?id=1082
看那张表格
3.就是用CFileFind啊
2.
http://www.vckbase.com/document/viewdoc/?id=1082
看那张表格
3.就是用CFileFind啊
#4
建议你看下上面网页那篇文章
#5
在预编译选项里设置unicode还是多字符集
WideCharToMultiByte
MultiByteToWideChar
WideCharToMultiByte
MultiByteToWideChar
#6
建议先看一下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);
}
#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);
}
#7
to yztgx(静风)
上叙程序,编译时有问题:error C2664: “FindFirstFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”
如改为: hFind=FindFirstFile((LPCWSTR)argv[1],&FindFileData);
可以运行,但存在的文件也被检测为不存在。
说明(LPCWSTR)强制转化出了问题.
那么对于这一问题该怎么解决了?
上叙程序,编译时有问题:error C2664: “FindFirstFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”
如改为: hFind=FindFirstFile((LPCWSTR)argv[1],&FindFileData);
可以运行,但存在的文件也被检测为不存在。
说明(LPCWSTR)强制转化出了问题.
那么对于这一问题该怎么解决了?
#8
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尝试着打开文件,如果不存在,会返回结果指示的。
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尝试着打开文件,如果不存在,会返回结果指示的。
#9
在要使用LPCWSTR的地方,用L"aaaaaa"形式, 比如你应该使用L"filepath".
#10
Thanks very much,I understand now!!!
#11
不好意思,分数有限,就这样给吧,真的很感谢大家哦!
#12
最近用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 函数怎么检测文件的存在与否?
---------------------------------------
1: FindFirstFileA 和 FindFirstFileW 一个是对应Ansi字符集,一个对应Unicode字符集, 你的工程到底使用那一个决定于你的设置,是否定义了UNICODE预编译宏。FindFirstFileA 和 FindFirstFileW对外的接口统一为FindFirstFile,
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE
注意:FindFirstFileA是通过FindFirstFileW来实现的,就是在内部调用FindFirstFileW前后调用字符集转换程序实现的。
现在知道Windows API中总多A和W函数的区别了吧!
2:TChar 和 char的区别, 还是unicode与 ansi的区别,如果的定义了unicode TCHAR 就是WCHAR, 否则就是char。
LPCTSTR 就是long pointer of Const TChar string
LPCWSTR 就是long Pointer of Const WChar string
LPCSTR 就是Long Pointer of Const string
能不能转换,看你的工程设置,归根到底WCHAR是short,char是BYTE,TCHAR是通用数据,可以自动编译为short或BYTE
3:你的方法也可以检测啊,如果返回true就存在呗
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 函数怎么检测文件的存在与否?
---------------------------------------
1: FindFirstFileA 和 FindFirstFileW 一个是对应Ansi字符集,一个对应Unicode字符集, 你的工程到底使用那一个决定于你的设置,是否定义了UNICODE预编译宏。FindFirstFileA 和 FindFirstFileW对外的接口统一为FindFirstFile,
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE
注意:FindFirstFileA是通过FindFirstFileW来实现的,就是在内部调用FindFirstFileW前后调用字符集转换程序实现的。
现在知道Windows API中总多A和W函数的区别了吧!
2:TChar 和 char的区别, 还是unicode与 ansi的区别,如果的定义了unicode TCHAR 就是WCHAR, 否则就是char。
LPCTSTR 就是long pointer of Const TChar string
LPCWSTR 就是long Pointer of Const WChar string
LPCSTR 就是Long Pointer of Const string
能不能转换,看你的工程设置,归根到底WCHAR是short,char是BYTE,TCHAR是通用数据,可以自动编译为short或BYTE
3:你的方法也可以检测啊,如果返回true就存在呗
#13
Thank you.
#14
mark
#15
不错,很有用,记下了