纯C,如何读取文件夹下所有文件?

yangyunzhao 2009-05-13 09:49:50
纯C的情况下,如何读取指定文件夹下面的所有文件。保存到一个vector<string>里面?谢谢

我看到有人用的CFileFind,不过这个是MFC的东西吧?我要能够跨平台的。谢谢!
...全文
968 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不错不错~~~~~~~
yangyunzhao 2009-05-14
  • 打赏
  • 举报
回复
大概两个方法,要么调用系统命令用system,要么调用系统API。C本身不能操作
zengtc 2009-05-13
  • 打赏
  • 举报
回复
路过。。。
cowboytian 2009-05-13
  • 打赏
  • 举报
回复
纯C有vector吗
liliangbao 2009-05-13
  • 打赏
  • 举报
回复
帮顶!!!
yangyunzhao 2009-05-13
  • 打赏
  • 举报
回复
就是WIN平台和Linux平台。
  • 打赏
  • 举报
回复
纯C,楼主,你这不是纯C的问题,是平台的问题,你先说是什么平台。
lingyin55 2009-05-13
  • 打赏
  • 举报
回复
c标准没有stl。

[Quote=引用楼主 yangyunzhao 的帖子:]
纯C的情况下,如何读取指定文件夹下面的所有文件。保存到一个vector <string>里面?谢谢

我看到有人用的CFileFind,不过这个是MFC的东西吧?我要能够跨平台的。谢谢!
[/Quote]
yangyunzhao 2009-05-13
  • 打赏
  • 举报
回复
MSDN找到一段代码,请大家看看,Linux下面可以用不?

#include <stdio.h>
#include <stdlib.h>
#include <io.h>

struct _finddata_t c_file;
intptr_t hFile;
if( (hFile = _findfirst( "D:\\ASAT\\iDataMgr\\Bin\\config\\meter\\*.txt", &c_file )) == -1L )//这里路径字符串可以用宏定义以便win平台和linux平台通用
printf( "No *.txt files in current directory!\n" );
else
{
do {
printf( " %-12s %9ld\n",
c_file.name, c_file.size );
} while( _findnext( hFile, &c_file ) == 0 );
_findclose( hFile );
}
laowa1840 2009-05-13
  • 打赏
  • 举报
回复
这不好跨平台吧,可能要调用系统命令,windows dir,linux ls
Paradin 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yangyunzhao 的回复:]
不会吧?WIN平台下面不就是类似 D:\f\1.txt
Lin下不就是/home/f/1.txt么?

没有办法么?
[/Quote]

那你就得提供多个版本呀。我还不知道有什么办法在程序里用与系统无关的方法判断当前的操作系统平台
yangyunzhao 2009-05-13
  • 打赏
  • 举报
回复
楼上的,你的是VC吧?
老邓 2009-05-13
  • 打赏
  • 举报
回复
void GetSkinToCombo(CComboBox & cbSkin)
{
TCHAR szFile[MAX_PATH];
GetModuleFileName(_Module.GetResourceInstance(), szFile, _countof(szFile));
PathRemoveFileSpec(szFile);
PathAppend(szFile, _T("Skins\\*"));
WIN32_FIND_DATA fdFind;
HANDLE hFind = FindFirstFile(szFile, &fdFind);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if (fdFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
StrCmp(fdFind.cFileName, _T(".")) != 0 &&
StrCmp(fdFind.cFileName, _T("..")) != 0)
{
size_t uLen;
StringCchLength(fdFind.cFileName, _countof(fdFind.cFileName), &uLen);
if (uLen < 30)
{
cbSkin.AddString(fdFind.cFileName);
}
}
}
while (FindNextFile(hFind, &fdFind));
FindClose(hFind);
}
}
老邓 2009-05-13
  • 打赏
  • 举报
回复
FindNext
jn989 2009-05-13
  • 打赏
  • 举报
回复
lz看看以前这篇帖子吧:
http://topic.csdn.net/u/20081008/20/cbb9f333-fd10-45cf-b121-af843a236438.html
yangyunzhao 2009-05-13
  • 打赏
  • 举报
回复
不会吧?WIN平台下面不就是类似 D:\f\1.txt
Lin下不就是/home/f/1.txt么?

没有办法么?
Paradin 2009-05-13
  • 打赏
  • 举报
回复
文件系统本来就不垮平台,C标准库也没有多少支持~
garymao8888 2009-05-13
  • 打赏
  • 举报
回复
学习中~~
amossavez 2009-05-13
  • 打赏
  • 举报
回复
3楼提供的代码挺好的!!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧