找回密码
 FreeOZ用户注册
查看: 2824|回复: 13
打印 上一主题 下一主题

[软件技巧] 再请教个问题:在非GUI的console程序中,如何读取磁盘的目录阿?

[复制链接]
跳转到指定楼层
1#
发表于 5-12-2011 11:17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
有啥库什么的可以用??还是有别的办法?俺在俺c++的教材里没有找到这部分的内容,不知道该如何实现?还请各位老师指点一二阿
回复  

使用道具 举报

2#
发表于 5-12-2011 12:39:24 | 只看该作者
回复  

使用道具 举报

3#
 楼主| 发表于 5-12-2011 13:28:25 | 只看该作者
回复  

使用道具 举报

4#
发表于 5-12-2011 13:45:48 | 只看该作者
There's no standard C++ way to emulate this because there is no standard C++ functionality of reading the contents of a directory. What you can do is use Boost.Filesystem:

#include <boost/filesystem.hpp>
using namespace boost::filesystem;

struct pathname_of {
    string operator()(const directory_entry& p) const {
        return p.path().filename();
    }
};

int main(int argc, char* argv[])
{
    transform(directory_iterator("."), directory_iterator(),
              ostream_iterator<string>(cout, "\n"),
              pathname_of());
    return 0;
}

评分

参与人数 2威望 +40 收起 理由
四香油饼 + 20 谢谢分享!
coredump + 20 你太有才了!

查看全部评分

回复  

使用道具 举报

5#
发表于 5-12-2011 17:41:52 | 只看该作者
油饼, 你要有一个概念,C++只是一个语言, 很多日常你需要的功能是通过各种库来实现的, 而这些功能根据你得环境不同, 所需要的外部依赖也是不一样的, 有时候是需要调用系统API, 有时候用第三方库。

如果需要做比较复杂的东西时, 你很想希望有人专门为你准备好的这些形形色色的库, 那么这样的东西, 叫平台, 或者框架, 比如Qt, 就是给C++做GUI开发而准备的框架。  所以, C++里,如何。。。。往往根据具体的环境, 有不同的答案。

评分

参与人数 1威望 +20 收起 理由
四香油饼 + 20 谢谢分享!正在慢慢培养概念中

查看全部评分

回复  

使用道具 举报

6#
 楼主| 发表于 5-12-2011 18:17:08 | 只看该作者
原帖由 蒙面超人 于 5-12-2011 13:45 发表
There's no standard C++ way to emulate this because there is no standard C++ functionality of reading the contents of a directory. What you can do is use Boost.Filesystem:

#include  
using namespa ...


谢谢超人,有一点看不懂,这个transform是boost库里的一个函数么?
回复  

使用道具 举报

7#
发表于 5-12-2011 22:53:52 | 只看该作者

回复 #6 四香油饼 的帖子

不是,是STL的标准类库,transform的作用就是遍历一个容器里面元素 然后执行一个操作

http://www.cplusplus.com/reference/algorithm/transform/
回复  

使用道具 举报

8#
发表于 5-12-2011 22:57:50 | 只看该作者

回复 #7 蒙面超人 的帖子

anyway,上面那个例子是抄别人的
关于transform,有个简单的例子

std::string sl = &quot;hello&quot;;
std::transform(sl.begin(), sl.end(), sl.begin(), toupper);  

transform是遍历一个容器里面元素 然后执行一个操作
第1和2个参数是数据起始和结束位置(迭代器)
参数3是写入目标的起始位置
参数4(toupper)是执行的操作(函数)

返回结果就是HELLO

评分

参与人数 1威望 +20 收起 理由
四香油饼 + 20 谢谢超人讲解:)

查看全部评分

回复  

使用道具 举报

9#
发表于 6-12-2011 13:08:28 | 只看该作者

评分

参与人数 1威望 +20 收起 理由
四香油饼 + 20 谢谢分享!

查看全部评分

回复  

使用道具 举报

10#
发表于 8-12-2011 01:58:17 | 只看该作者
现在Boost库很流行了吗?想当年我刚刚离开IT行业的时候,Boost刚刚开始蹿红,那是10年前吧,当时还是MFC和Borland OWL的天下。。。好像现在Borland倒闭了?
回复  

使用道具 举报

11#
发表于 8-12-2011 02:02:59 | 只看该作者
如果我要问问题,肯定会先说明系统和开发环境的。

油饼这些信息都没提大家都看得懂,我却一头雾水,彻底OUT,太悲哀了
回复  

使用道具 举报

12#
 楼主| 发表于 8-12-2011 11:39:47 | 只看该作者
原帖由 nnzdwxjy 于 8-12-2011 02:02 发表
如果我要问问题,肯定会先说明系统和开发环境的。

油饼这些信息都没提大家都看得懂,我却一头雾水,彻底OUT,太悲哀了


我之所以有这些问题,是因为最近要做一个嵌入式的文件系统,网上有一些c的资源,但我想用c++,所以要自己编了,准备先在PC上写好,再移植过去,所以就有了这个问题。
回复  

使用道具 举报

13#
发表于 8-12-2011 12:01:13 | 只看该作者

回复 #12 四香油饼 的帖子

我不太相信编译器厂家说的,他们的产品跨平台能力如何如何,哦,是一点也不相信。

应用层的程序,相信他们的说法没什么问题。如果是底层应用,比如驱动、文件系统什么的,还是自己直接调用系统API来得放心,用别人的库,程序怎么当掉的都一头雾水。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 1-11-2024 18:18 , Processed in 0.051888 second(s), 30 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表