如何用C语言获取目录下的文件和目录列表?
1、可以利用getenv函数来实现。
在Linux系统中,home目录的定义是通过系统环境变量中的HOME变量值来确定的,在shell下可以通过
echo $HOME来查看。
而在C语言中,库函数getenv可以用作获取环境变量值。该函数位于stdlib.h, 原型为
char *getenv(char *name);
功能为获取名字为name的环境变量字符串。
所以,下面代码就可以获取到home目录名了:
2、例程:
char *home;
home = getenv(“HOME”);
printf(“the home path is %s\n”, home);
c语言 怎么查找 当前目录有哪些 文件
在命令提示符窗口运行:findfile (盘符):\ *.(文件后缀)
如:[sourcecode language=”plain”]findfile d:\ *.txt [/sourcecode]
即为找出d盘根目录下的所有.txt后缀的文件并写入文件路径于文件中。
c语言 怎样获取文件夹中的所有文件
较简单的是用DOS命令 DIR 并转向到一个文件,再打开文件读出一个一个文件名。
例如:
char my_cmd[80] = “DIR/B/A-D D:\\USER\\WANG abc.lis”;
system( cmd);
你就获得D:\\USER\\WANG 文件夹中的所有文件,选项意思是 只列 文件名,并按字母排列。
abc.lis 转向,存入文件 abc.lis
接着,你可以 用FILE *fp; fp = fopen(“abc.lis”,”r”); 打开文件
用 fgets() 读文件名。
怎样使用C语言列出某个目录下的文件?
用C语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为:
打开目录
循环读目录,输出目录下文件
关闭目录指针
参考代码:
#include dirent.h
#include stdio.h
int main()
{
DIR *dirp;
struct dirent *dp;
dirp = opendir(“.”); //打开目录指针
while ((dp = readdir(dirp)) != NULL) { //通过目录指针读目录
printf(“%s\n”, dp-d_name );
}
(void) closedir(dirp); //关闭目录
return 0;
}
在windows下,代码如下:
#include io.h
#include stdio.h
void printDir( const char* path )
{
struct _finddata_t data;
long hnd = _findfirst( path, data ); // 查找文件名与正则表达式chRE的匹配第一个文件
if ( hnd 0 )
{
perror( path );
}
int nRet = (hnd 0 ) ? -1 : 1;
while ( nRet = 0 )
{
if ( data.attrib == _A_SUBDIR ) // 如果是目录
printf(” [%s]*\n”, data.name );
else
printf(” [%s]\n”, data.name );
nRet = _findnext( hnd, data );
}
_findclose( hnd ); // 关闭当前句柄
}
void main()
{
printDir(“d:/*.*”);
}
相关函数说明:
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
// 功 能 : 提供与filespec指定入口泛式匹配的第一个文件.通常后继用_findnext()函数来完成某泛式下的文件遍历.
// 头文件 : #include io.h
// 参 数 : filespec – 目标文件规范,可以包含通配符
// fileinfo – 文件信息buffer
// 返回值 : 成功返回唯一的搜索句柄
// 出错返回-1,且设置errno为如下值:
// ENOENT 该泛式无法匹配
// EINVAL 无效文件名
int _findnext( long handle, struct _finddata_t *fileinfo );
// 功 能 : 按照前面_findfirst中的泛式规则,查找下一个符合该泛式的文件,并以此为依据修改fileinfo中的值
// 头文件 : #include io.h
// 参 数 : long handle – 搜索句柄(通常由紧靠其前的_findfirst()返回)
// fileinfo – 文件信息buffer
// 返回值 : 成功返回0
// 出错返回-1
int _findclose( long handle );
// 功 能 : 关闭搜寻句柄并释放相应资源
// 头文件 : #include io.h
// 参 数 : long handle – 搜索句柄(通常由紧靠其前的_findfirst()返回)
// 返回值 : 成功返回0
// 出错返回-1
VC环境中用C语言查找当前路径下的所有文件和文件夹的函数是什么?
这是我的TFTP程序中的一个函数,是搜索当前盘符下的所有文件,包括文件的大小,并发送到客户端,其中就有查找当前路径下的文件,你自己挑一下,应该能完成你的需求。
void FileList(sockaddr_in sour_addr,char strStartDir[])
{
char sendbuffer[1024];
sockaddr_in destaddr;
int sourlen = 0;
int ret = 0;
int len = 0;
int flen = 0;
fd_set fdr;
unsigned short blocknum = 0;
FILE *file;
char filename[128];
strcpy(filename,strStartDir+2); /*获取文件名*/
strcat(filename,”\\*”);
destaddr.sin_family = AF_INET;
destaddr.sin_port = sour_addr.sin_port;
destaddr.sin_addr.s_addr = inet_addr(desthost);//
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(filename, FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf (“Invalid File Handle”);
}
else
{
while(FindNextFile(hFind,FindFileData))
{
printf(FindFileData.cFileName);
printf(“\r\n”);
memset(sendbuffer,’\0′,1024);
len = filldata(blocknum++,FindFileData.cFileName,strlen(FindFileData.cFileName),sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)destaddr,sizeof(destaddr));
}
len = fillover(blocknum,”Over”,4,sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)destaddr,sizeof(destaddr));
FindClose(hFind);
return;
}
}
请我如何c语言遍历文件夹
#include windows.h
/************************************************/
*参数说明:
char *pszDestPath为需要遍历的目标路径
/************************************************/
EnmuDirectory(char *pszDestPath)
{
//此结构说明参MSDN
WIN32_FIND_DATA FindFileData;
//查找文件的句柄
HANDLE hListFile;
//绝对路径,例:c:\windows\system32\cmd.exe
char szFullPath[MAX_PATH];
//相对路径
char szFilePath[MAX_PATH];
//构造相对路径
wsprintf(szFilePath, “%s\\*”, pszDestPath);
//查找第一个文件,获得查找句柄,如果FindFirstFile返回INVALID_HANDLE_VALUE则返回
if((hListFile = FindFirstFile(szFilePath, FindFileData)) == INVALID_HANDLE_VALUE)
{
//查找文件错误
return 1;
}
else
{
do
{
//过滤.和..
//“.”代表本级目录“..”代表父级目录
if( lstrcmp(FindFileData.cFileName, TEXT(“.”)) == 0 ||
lstrcmp(FindFileData.cFileName, TEXT(“..”)) == 0 )
{
continue;
}
//构造全路径
wsprintf(szFullPath, “%s\\%s”, pszDestPath, FindFileData.cFileName);
//读取文件属性,如果不是文件夹
if(!(FindFileData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY))
{
//这里你可以自己添加分析是某种类型文件的代码。可以根据
//扩展名分析。
//这里有个实例,你可以看看
//有必要初始化一下
char *pszFileType = NULL;
//把pszFileType指向cFileName的倒数第三个数符。因为一般扩展名长为3个字符。
//当然,你也可以用其它方法分析扩展名。或倒序查“.”
pszFileType = (FindFileData.cFileName[strlen(FindFileData.cFileName) – 3]);
//如果是jpg结尾的文件
if(!stricmp(pszFileType, “jpg”))
{
FILE *fp;
//或许这里打开C:\\data.txt不应该用”w+”,你可试着来
fp = fopen(“c:\\data.txt”, “w+”);
if(fp) fputs(szFullPath, fp);
fclose(fp);
}
}
//如果是文件夹,则递归调用EnmuDirectory函数
if(FindFileData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)
{
EnmuDirectory(szFullPath);
}
//循环,查找下一个文件
}while(FindNextFile(hListFile, FindFileData));
}
//关闭句柄
FindClose(hListFile);
//清空结构。可有可无的一句代码。函数退出会自动清空。
ZeroMemory(FindFileData, sizeof(FindFileData));
return 0;
}
这是windows api版的,还有MFC版的和C版的。要的话来找我Q:503267714