找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4709|回复: 5

跨平台目录遍历问题

[复制链接]
发表于 2008-3-25 11:17:41 | 显示全部楼层 |阅读模式
最新需要实现跨平台目录遍历的功能,在windows下可以使用FindFirstFileEx、FindNextFile等函数,ACE提供的opendir_emulation、readdir_emulation函数族与Windows的FindFirstFileEx、FindNextFile功能是一致的;但是据说在ACE的4.3版本都还没有支持目录遍历跨平台的封装,我现在用的是ACE5.6版,不知道这个版本是否实现了目录遍历跨平台的封装,麻烦高人指点!
另外,谁由跨平台的目录遍历的代码,能否共享出来看看啊,谢谢
 楼主| 发表于 2008-3-27 14:06:41 | 显示全部楼层
竟然没有一个人会的?
 楼主| 发表于 2008-3-27 18:23:43 | 显示全部楼层
顶起来
真的没人了么?
发表于 2008-3-28 18:13:11 | 显示全部楼层
自己去查看一下代码就知道了。除非用过,否则大家没法回答这类问题啊。
 楼主| 发表于 2008-4-2 10:22:34 | 显示全部楼层
发表于 2008-9-26 23:36:27 | 显示全部楼层

换个更简单的c++解决方案,用boost::filesystem

#pragma once
#include <boost/filesystem/operations.hpp>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
using namespace boost;

class FileHelper
{
public:
        static bool findFile(filesystem::path const& dirPath,std::string const& fileName,filesystem::path & pathFound )
        {
                if ( !exists( dirPath ) )
                        return false;
                filesystem::directory_iterator end_itr; // default construction yields past-the-end
                for (filesystem::directory_iterator itr( dirPath );itr != end_itr;++itr )
                {
                        if (filesystem::is_directory(itr->status()) )
                        {
                                if (findFile( itr->path(), fileName, pathFound ) )
                                        return true;
                        }
                        else if ( itr->path().leaf() == fileName ) // see below
                        {
                                pathFound = itr->path();
                                return true;
                        }
                }
                return false;
        }
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 00:08 , Processed in 0.013434 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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