window和linux下遍历目录的比较

window下,遍历目录主要是用FindFirstFile和FindNextFile,而linux下是用opendir和readdir实现

void scanFile(char *szDir)
{
	WIN32_FIND_DATA FindFileData;
	char szFilePath[MAX_PATH];

	strncpy(szFilePath, szDir, strlen(szDir) + 1);
	strncat(szFilePath, "*", 2);

	HANDLE hFile = INVALID_HANDLE_VALUE;
	hFile = FindFirstFile(szFilePath, &FindFileData);
	if (hFile == INVALID_HANDLE_VALUE) {
		printf("FindFirstFile error\n");
		return ;
	}

	if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
		if (strcmp(FindFileData.cFileName, ".") != 0 
			&& strcmp(FindFileData.cFileName, "..") != 0) {
				char tmpPath[MAX_PATH];
				strncpy(tmpPath, szDir, strlen(szDir) + 1);
				strncat(tmpPath, FindFileData.cFileName, strlen(FindFileData.cFileName) + 1);
				strncat(tmpPath, "\\", 2);
				scanFile(tmpPath);
		}
	} else {
		printf("path:%s    fileName=%s\n", szDir, FindFileData.cFileName);
	}

	while (FindNextFile(hFile, &FindFileData) != 0) {
		if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			if (strcmp(FindFileData.cFileName, ".") != 0 
				&& strcmp(FindFileData.cFileName, "..") != 0) {
					char tmpPath[MAX_PATH];
					strncpy(tmpPath, szDir, strlen(szDir) + 1);
					strncat(tmpPath, FindFileData.cFileName, strlen(FindFileData.cFileName) + 1);
					strncat(tmpPath, "\\", 2);
					scanFile(tmpPath);
			}
		} else {
			printf("path:%s    fileName=%s\n", szDir, FindFileData.cFileName);
		}
	}

	FindClose(hFile);

}

linux下遍历 代码如下:

void scanFile(char *szDir)
{
    DIR *pDir = NULL;
    struct dirent *pFile = NULL;
    
    pDir = opendir(szDir);
    if (pDir == NULL) return;
    
    while ((pFile = readdir(pDir)) != NULL) {
        if (pFile->d_type & DT_DIR) {
            if (strcmp(pFile->d_name, ".") == 0 
                || strcmp(pFile->d_name, "..") == 0) continue;
            
            char Path[256];
            int len = strlen(szDir);
            strncpy(Path, szDir, len + 1);
            if (szDir[len - 1] != '/') strncat(Path, "/", 2);
            strncat(Path, pFile->d_name, strlen(pFile->d_name) + 1);
            scanFile(Path);
        } else {
            printf("path:%s     fileName:%s\n", szDir, pFile->d_name);
        }
    }
    
    closedir(pDir);
}




  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值