免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10573 | 回复: 8
打印 上一主题 下一主题

[函数] 问个opendir函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-13 13:06 |只看该作者 |倒序浏览
请问大家一下,如果我想读取某文件夹下所有的文件名,是不是用opendir函数啊,它的头文件是dirent.h吗?我在VC6里的时候,怎么没有这头文件啊?在MSDN里也查不到opendir这个函数,难道VC6里没有?望知道的能告诉我一下,不甚感激啊!还有除了,opendir能读取文件夹下所有的文件名,还有其他方法吗?再次感谢!!!

论坛徽章:
0
2 [报告]
发表于 2006-01-13 13:11 |只看该作者
unix system call

论坛徽章:
0
3 [报告]
发表于 2006-01-13 13:15 |只看该作者
谢楼上的!是unix专用啊,那俺就没函数可用了?

论坛徽章:
0
4 [报告]
发表于 2006-01-13 13:21 |只看该作者
use win API of directory

论坛徽章:
0
5 [报告]
发表于 2006-01-13 13:58 |只看该作者
太感谢楼上的了,但小声的问一下,能告诉我是什么函数吗?我刚才搜了半天还是没找到什么函数可用。

论坛徽章:
0
6 [报告]
发表于 2008-09-10 09:28 |只看该作者
小写段代码,不知道能不能帮助你 !
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

int main( int argc,char *argv[] )
{
   DIR   *dp;
   struct dirent *dirp;
   if( argc != 2 )
   {
      printf("error:need argument!\n");
      return 0;
   }
   if ( ( dp = opendir(argv[1]) ) == NULL )
   {
      printf("can't open dir %s\n",argv[1] );
      return 0;
   }
   while ( (dirp = readdir (dp)) != NULL )
   {
      printf("%s\n",dirp->d_name);
   }
   closedir(dp);
   return 0;
}

论坛徽章:
0
7 [报告]
发表于 2008-09-10 10:00 |只看该作者
/**//*******************************
*     函数名:FindFile
*     输入参数:pFilePath(路径)
*     输出参数:无
*     功能
*********************************/
void FindFile(char * pFilePath)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    char DirSpec[MAX_PATH + 1];// 指定路径
    DWORD dwError;

    strncpy (DirSpec, pFilePath, strlen(pFilePath) + 1);
    strncat (DirSpec, "\*", 3);

    hFind = FindFirstFile((DirSpec, &FindFileData);

    if (hFind == INVALID_HANDLE_VALUE)
    {
        printf ("Invalid file handle. Error is %u ", GetLastError());
        return ;
    }
    else
    {
        if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY )
        {
            printf ("  %s ", FindFileData.cFileName);   //找到文件
        }
        else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
            && strcmp(FindFileData.cFileName, ".") != 0
            && strcmp(FindFileData.cFileName, "..") != 0)
        {   //找到目录
            char Dir[MAX_PATH + 1];
            strcpy(Dir, pFilePath);
            strncat(Dir, "\", 2);
            strcat(Dir, FindFileData.cFileName);

            FindFile(Dir);
        }

        while (FindNextFile(hFind, &FindFileData) != 0)
        {
            if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
            {   //找到文件
                printf ("  %s ", FindFileData.cFileName);
            }
            else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
                && strcmp(FindFileData.cFileName, ".") != 0
                && strcmp(FindFileData.cFileName, "..") != 0)
            { //找到目录
                char Dir[MAX_PATH + 1];
                strcpy(Dir, pFilePath);
                strncat(Dir, "\", 2);
                strcat(Dir, FindFileData.cFileName);
                FindFile(Dir);
            }

        }

        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES)
        {
            printf ("FindNextFile error. Error is %u ", dwError);
            return;
        }
    }
}

引自 http://blog.csdn.net/benbon/archive/2007/12/01/1911230.aspx

未测试

论坛徽章:
0
8 [报告]
发表于 2008-09-10 13:18 |只看该作者
win32API里面不晓得有没有现成的接口啊

论坛徽章:
0
9 [报告]
发表于 2008-09-10 13:23 |只看该作者
原帖由 nicozhou 于 2008-9-10 13:18 发表
win32API里面不晓得有没有现成的接口啊

好像没有现成的接口,我用的是FindFirstFile 和FindNextFile来遍历的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP