C / C++ 文件文件夹操作详细整理

专题1   C/C++ 文件读写

#本文件所述内容遵循C/C++原汁原味思想。

#YangJD 2013/8/2 整理

#http://blog.csdn.net/cquredstar

一、C环境下文件夹操作

C的文件夹操作相关的结构体和函数定义在头文件io.h中。主要有结构体_finddata_t,函数_access、_findfirst、_findnext和_findclose。

1.结构体 _finddata_t内容如下:

#define _finddata_t  _finddata64i32_t

struct _finddata64i32_t {

       unsigned    attrib;

       __time64_t  time_create;    /* -1 for FAT file systems */

       __time64_t  time_access;    /* -1 for FAT file systems */

        __time64_t  time_write;         /*typedef __int64 __time64_t;*/

        _fsize_t     size;                       /*typedef unsigned long _fsize_t;*/

       char        name[260];

};

unsinged attrib的值有以下几种:

_A_ARCH(存档)

_A_HIDDEN(隐藏)

_A_NORMAL(正常)

_A_RDONLY(只读)

_A_SUBDIR(文件夹)

_A_SYSTEM(系统)

它们本身都是2的幂的宏定义。

2. 相关函数

_access函数的声明与定义

int  _access(_In_z_ const char * _Filename, _In_int _AccessMode);

返回值:若文件或文件夹存在,则返回非 -1值;若不存在,返回-1

参数:_Filename是文件夹或文件的路径字符串;_AccessMode指期望访问的方式。

_findfirst函数的声明与定义

#define_findfirst  _findfirst32

long _findfirst(char *filespec, struct _finddata_t *fileinfo )

返回值:如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1

参数:filespec标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件;fileinfo用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体中。

_findnext函数的声明和定义

#define_findnext  _findfirst32

int  _findnext( long handle, struct _finddata_t*fileinfo );

返回值:若成功返回0,否则返回-1

参数:handle是由_findfirst函数返回回来的句柄;fileinfo是用来存放文件信息的结构体的指针。

_findclose函数的声明和定义

        int  _findclose( long handle );

        返回值:成功返回0,失败返回-1

        参数: handle是由_findfirst函数返回的句柄。

3.示例程序

#pragma once

#include <io.h>/* 声明了文件夹或文件属性操作的结构体及函数 */

#include <stdio.h> /* 声明了标准输入相关的宏定义或函数 */

#include <stdlib.h> /* system("");要用到*/

#include <string.h> /* 定义了字符串操作相关函数*/

 

int main(int argn,char** argv)

{

         /*char*dir=".//test";*/

         chardir[128];

         charfilename[128];

         struct_finddata_t fddata;/*必须加上struct说明*/

         printf("pleaseinput an dir path:");

         scanf("%s",dir);

         if(_access(dir,0)==-1)

         {

                   printf("%sis unavalible.",dir);

                   system("pause");

                   return-1;

         }

         strcpy(filename,dir);

         strcat(filename,"//*.*");

         longhandle_fd=_findfirst(filename,&fddata);/*找到当前文件或文件夹下第一个文件*/

         if(!handle_fd)/*检查是否找到*/

         {

                   printf("%sis unavalible.",filename);

                   system("pause");

                   return-1;

         }

         do

         {

                   if(fddata.attrib==_A_SUBDIR)

                   {

                            printf("Dir: %s\n",fddata.name);

  

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值