C++ 如何获得某个文件夹下符合某一文件名格式的文件数量

忘世麒麟 2016-02-03 03:28:48
请教各位一个问题
我有一个文件夹比如说 Download,里面有很对这样子的文件:
任务.blk
任务1.blk
任务2.blk
任务5.blk
......
任务N.blk
我需要依次打开这些文件,把里面的数据换掉.

我的问题是,我不知道里面这种 "任务%.blk"有多少.我定义一个结构体map<string,vector<string>>,我希望用string表示文件名,用vector保存里面的所有内容然后更换完后,按照string,将vector中的内容写回到对应的文件中.

请问你们有什么好方法吗?
我想难点在于:如何获得这些文件的数量(更甚至与,获取这些文件名保存到一个vector变量中,这样方便我读取).
...全文
1033 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
eerfcfc 2017-02-17
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
赞一个,有用
ossuser123 2016-02-09
  • 打赏
  • 举报
回复
你准备在哪个操作系统下面运行?
ynsenyu 2016-02-05
  • 打赏
  • 举报
回复
http://blog.csdn.net/abcjennifer/article/details/18147551 这个是遍历目录取得文件名的,自己加判断后缀然后输出就可以了
忘世麒麟 2016-02-05
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
Windows 中 FileDialog(或者 GetOpenFileName API) 就可以
亲,那速度得多慢啊.我查找了一下他存储的逻辑,看我还是"如何存就如何改"吧.文件名和文件数量的已经有手段了.
lm_whales 2016-02-05
  • 打赏
  • 举报
回复
FileDialog 只是弹出一个对话框的时间,其实用不了许多时间的。 你可以在外部发送命令给对话框,让他终止,而不必手动关闭
lm_whales 2016-02-05
  • 打赏
  • 举报
回复
lst dir 就可以找到文件和数量了 改名用rename 替换用replace 替换内容, 可以用Notepad 新建一个文件,把内容写入NotePad 另存为即可 可以通过外部向Notepad 发送命令做到 有很多软件采取的是这种方式 例如 AutoCad 可以用notepad 做文本编辑器
lm_whales 2016-02-04
  • 打赏
  • 举报
回复
Windows 中 FileDialog(或者 GetOpenFileName API) 就可以
赵4老师 2016-02-04
  • 打赏
  • 举报
回复
引用 8 楼 baijiaheizhiganmao 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] Linux下使用grep、sed或awk Windows下使用findstr、edlin ?
问题是,那个东西啊,是通过一个结构体存储的,文件内部根本没有标记换行或者下一个结构体内容的东西~~~~~也不知道写这个东西的人事什么意思.[/quote] 如果替换后长度不变,使用fread,fwrite即可。 否则 所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
忘世麒麟 2016-02-04
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
Linux下使用grep、sed或awk Windows下使用findstr、edlin ?
问题是,那个东西啊,是通过一个结构体存储的,文件内部根本没有标记换行或者下一个结构体内容的东西~~~~~也不知道写这个东西的人事什么意思.
赵4老师 2016-02-04
  • 打赏
  • 举报
回复
Linux下使用grep、sed或awk Windows下使用findstr、edlin ?
忘世麒麟 2016-02-04
  • 打赏
  • 举报
回复
引用 5 楼 lianshaohua 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
引用 3 楼 zhao4zhong1 的回复:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
嗯,支持一个,不错。[/quote] 不过写入文件中的原来字段,且不影响其他字段,我还是用打开文件,查找特定字段,写入,的老套路,很麻烦. 两位有没有使用shell命令的好的接口?
ztenv 版主 2016-02-04
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
嗯,支持一个,不错。
忘世麒麟 2016-02-03
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
牛13!!!!!!佩服的不要不要的。
赵4老师 2016-02-03
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
jiqiang01234 2016-02-03
  • 打赏
  • 举报
回复
boost::filesystem
sdghchj 2016-02-03
  • 打赏
  • 举报
回复
枚举和字符串查找,百度如下函数 windows平台:FindFirstFile linux平台:opendir

64,670

社区成员

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

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