c++获取指定目录下的文件名
我想获取指定目录下的所有文件名,但是用网上的方法WIN32_FIND_DATAFindFileData;HANDLEhFind;……都是可以在vc6.0中可以运行,而在v...
我想获取指定目录下的所有文件名,但是用网上的方法WIN32_FIND_DATA FindFileData;
HANDLE hFind; ……都是可以在vc6.0中可以运行,而在visualstudio2010中总是出现LPCWSTR类型的问题。我好不容易把那些问题解决了,结果又出了问题,总是hFind == INVALID_HANDLE_VALUE 代码如下:
//功能:获取communication目录下指定类型的文件名
//参数:三个常量,代表要获取文件的文件类型STU,TEA,ADM.如STU,代表扩展名为.stu的文件类型
//返回动态生成的文件名的string对象数组首地址(返回值需要delete掉)
string* AdmFile::GetComFileNames(int FileTpye){
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
LPCWSTR filepath;
switch(FileTpye){
case STU:
filepath = L".\\communication\\*.stu";
break;
case TEA:
filepath = L".\\communication\\*.tea";
break;
case ADM:
filepath = L".\\communication\\*.adm";
break;
}
hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
int find = 1;
int i = 0;
while(find){
find = FindNextFile(hFind, &FindFileData);
i++;
}
FindClose(hFind);
string* filenames = new string[i];
hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
find = 1;
i = 0;
while(find){
filepath = FindFileData.cFileName;
DWORD dwMinSize = 0;
LPSTR lpszStr = NULL;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,NULL,0,NULL,FALSE);
lpszStr = new char [dwMinSize];
WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,lpszStr,dwMinSize,NULL,FALSE);
filenames[i] = lpszStr;
delete [] lpszStr;
i++;
find = FindNextFile(hFind, &FindFileData);
}
// for(int j=0; j<i; ++j){
// cout << filenames[j] << endl;
// }
FindClose(hFind);
return filenames;
}
求解释……
如果给我介绍别的方法请保证在visualstudio2010下能用
小弟先谢谢了 展开
HANDLE hFind; ……都是可以在vc6.0中可以运行,而在visualstudio2010中总是出现LPCWSTR类型的问题。我好不容易把那些问题解决了,结果又出了问题,总是hFind == INVALID_HANDLE_VALUE 代码如下:
//功能:获取communication目录下指定类型的文件名
//参数:三个常量,代表要获取文件的文件类型STU,TEA,ADM.如STU,代表扩展名为.stu的文件类型
//返回动态生成的文件名的string对象数组首地址(返回值需要delete掉)
string* AdmFile::GetComFileNames(int FileTpye){
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
LPCWSTR filepath;
switch(FileTpye){
case STU:
filepath = L".\\communication\\*.stu";
break;
case TEA:
filepath = L".\\communication\\*.tea";
break;
case ADM:
filepath = L".\\communication\\*.adm";
break;
}
hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
int find = 1;
int i = 0;
while(find){
find = FindNextFile(hFind, &FindFileData);
i++;
}
FindClose(hFind);
string* filenames = new string[i];
hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
find = 1;
i = 0;
while(find){
filepath = FindFileData.cFileName;
DWORD dwMinSize = 0;
LPSTR lpszStr = NULL;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,NULL,0,NULL,FALSE);
lpszStr = new char [dwMinSize];
WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,lpszStr,dwMinSize,NULL,FALSE);
filenames[i] = lpszStr;
delete [] lpszStr;
i++;
find = FindNextFile(hFind, &FindFileData);
}
// for(int j=0; j<i; ++j){
// cout << filenames[j] << endl;
// }
FindClose(hFind);
return filenames;
}
求解释……
如果给我介绍别的方法请保证在visualstudio2010下能用
小弟先谢谢了 展开
推荐于2018-04-11
展开全部
可以使用searchenv函数来实现,参考代码如下:
int main( void )
{
char pathbuffer[_MAX_PATH];
char searchfile[] = "×.EXE";
char envvar[] = "PATH";
// Search for file in PATH environment variable:
_searchenv( searchfile, envvar, pathbuffer ); // C4996
// Note: _searchenv is deprecated; consider using _searchenv_s
if( *pathbuffer != '\0' )
printf( "Path for %s:\n%s\n", searchfile, pathbuffer );
else
printf( "%s not found\n", searchfile );
}
推荐于2016-02-19
展开全部
3.34 icePub_getPathList
l 函数原型:
int WINAPI icePub_getPathList(char *strCurrentPath,char *strPathList,int maxLen,int flag)
输入:strCurrentPath 待搜索路径名
maxLen strPathList最大长度
flag 信息标志,0 只文件名,1 文件长度
输出:strPathList 带全路径文件名
VC sample代码:
char buffer[1024*10+1];
{
typedef int (WINAPI ICEPUB_GETPATHLIST)( char *strCurrentPath,char *strPathList,int maxLen,int flag);
ICEPUB_GETPATHLIST *icePub_getPathList = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getPathList = (ICEPUB_GETPATHLIST *)GetProcAddress(hDLLDrv, "icePub_getPathList");
}
if(icePub_getPathList != NULL)
{
int a;
buffer[0]=0;
a=icePub_getPathList("C:\\",buffer,1024*10,1);
AfxMessageBox(buffer);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
}
http://dl.icese.net/dev.php?f=icePubDll.rar 下载
l 函数原型:
int WINAPI icePub_getPathList(char *strCurrentPath,char *strPathList,int maxLen,int flag)
输入:strCurrentPath 待搜索路径名
maxLen strPathList最大长度
flag 信息标志,0 只文件名,1 文件长度
输出:strPathList 带全路径文件名
VC sample代码:
char buffer[1024*10+1];
{
typedef int (WINAPI ICEPUB_GETPATHLIST)( char *strCurrentPath,char *strPathList,int maxLen,int flag);
ICEPUB_GETPATHLIST *icePub_getPathList = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getPathList = (ICEPUB_GETPATHLIST *)GetProcAddress(hDLLDrv, "icePub_getPathList");
}
if(icePub_getPathList != NULL)
{
int a;
buffer[0]=0;
a=icePub_getPathList("C:\\",buffer,1024*10,1);
AfxMessageBox(buffer);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
}
http://dl.icese.net/dev.php?f=icePubDll.rar 下载
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <stdio.h>
int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
int find = 1;
hFind = FindFirstFile("*.jpg", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
return (0);
}
else
{
while(find)
{
printf ("The first file found is %s\n", FindFileData.cFileName);
find = FindNextFile(hFind, &FindFileData);
}
FindClose(hFind);
return (1);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询