ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:16.86KB ,
资源ID:11703722      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11703722.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ioh下的findfirst和finenext.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ioh下的findfirst和finenext.docx

1、ioh下的findfirst和finenextio.h下的_findfirst()和_finenext() 一、这两个函数均在io.h里面。二、首先了解一下一个文件结构体:struct_finddata_t unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name260;time_t,其实就是long而_fsize_t,就是unsigned long现在来解释一下结构体的数据成员吧。attrib,就是所查找文件的属性:_A_ARCH(存档)、_A_HI

2、DDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和文件最后被修改的时间。size:文件大小name:文件名。 三、用_findfirst 和 _findnext 查找文件1、_findfirst函数:long _findfirst(const char *, struct_finddata_t *);第一个参数为文件名,可以用*.*来查找所有文件,也可以用*.cpp来查找.cpp文件。第二个参数是_f

3、inddata_t结构体指针。若查找成功,返回文件句柄,若失败,返回-1。 2、_findnext函数:int _findnext(long, struct _finddata_t*);第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。3、_findclose()函数:int _findclose(long);只有一个参数,文件句柄。若关闭成功返回0,失败返回-1。 四、查找文件例子#include#includeusingnamespace std;intmain() _finddata_t file; int k; long HAND

4、LE; k = HANDLE = _findfirst( *.*,&file ); while( k != -1 ) cout<< file.name<< endl; k = _findnext( HANDLE,&file ); _findclose( HANDLE); return 0;转自: _finddata_t 是用来存储文件各种信息的结构体。定义如下:struct _finddata_tunsigned attrib;time_t time_create;time_t time_access;time_t time_write;_fsize_t

5、 size;char name_MAX_FNAME;其中各成员变量的含义如下:unsigned attrib:文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)_A_HIDDEN(隐藏)_A_NORMAL(正常)_A_RDONLY(只读)_A_SUBDIR(文件夹)_A_SYSTEM(系统)这些都是在中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为1,而其他位为0)。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合

6、。例如只读+隐藏+系统属性,应该为:_A_HIDDEN| _A_RDONLY | _A_SYSTEM 。time_t time_create:这里的time_t是一个变量类型(长整型?相当于longint?),用来存储时间的,我们暂时不用理它,只要知道,这个time_create变量是用来存储文件创建时间的就可以了。time_t time_access:文件最后一次被访问的时间。time_t time_write:文件最后一次被修改的时间。_fsize_tsize:文件的大小。这里的_fsize_t应该可以相当于unsigned整型,表示文件的字节数。charname_MAX_FNAME:文件

7、的文件名。这里的_MAX_FNAME是一个常量宏,它在头文件中被定义,表示的是文件名的最大长度。头文件引用: #include io.h=转C+下遍历文件夹编写程序遍历文件夹及其子文件夹下所有文件,并输出到标准输出流或者文件流。 1. 先考虑在单层目录下,遍历所有文件。以C:WINDOWS为例: 用到数据结构_finddata_t,文件信息结构体的指针。 C+代码 struct _finddata_t unsigned attrib; /文件属性 time_t time_create; /文件创建时间 time_t time_access; /文件上一次访问时间 time_t time_wri

8、te; /文件上一次修改时间 _fsize_t size; /文件字节数 char name_MAX_FNAME;/文件名 ; 文件属性是无符号整数,取值为相应的宏:_A_ARCH(存档),_A_SUBDIR(文件夹),_A_HIDDEN(隐藏),_A_SYSTEM(系统),_A_NORMAL(正常),_A_RDONLY(只读)。容易看出,通过这个结构体,我们可以得到关于该文件的很多信息。结合以下函数,我们可以将文件信息存储到这个结构体中: C+代码 /按FileName命名规则匹配当前目录第一个文件 _findfirst(_In_ const char * FileName, _Out_ s

9、truct_finddata64i32_t * _FindData); /按FileName命名规则匹配当前目录下一个文件_findnext(_In_ intptr_t _FindHandle, _Out_ struct_finddata64i32_t * _FindData); /关闭_findfirst返回的文件句柄_findclose(_In_ intptr_t _FindHandle); _findfirst函数返回的是匹配到文件的句柄,数据类型为long。遍历过程可以指定文件类型,这通过FileName的赋值来实现,例如要遍历C:WINDOWS下的所有.exe文件 C+代码 bool

10、 transfer(string fileName = C:Windows*.exe, intexeNum = 0) _finddata_t fileInfo; long handle =_findfirst(fileName.c_str(), &fileInfo); if (handle = -1L) cerr << failed totransfer files << endl; return false; do exeNum +; cout <<fileInfo.name < while(_findnext(handle, &fi

11、leInfo) = 0); cout<< .exe files number: << exeNum<< endl; return true; 2.遍历文件夹及其子文件夹下所有文件。操作系统中文件夹目录是树状结构,使用深度搜索策略遍历所有文件。用到_A_SUBDIR属性,可运行程序如下: C+代码 void dfsFolder(string folderPath, ofstream&fout) _finddata_t FileInfo; string strfind =folderPath + *; long Handle =_findfirst(st

12、rfind.c_str(), &FileInfo); if (Handle = -1L) cerr << can notmatch the folder path << endl; exit(-1); do /判断是否有子目录 if (FileInfo.attrib & _A_SUBDIR) /这个语句很重要 if(strcmp(FileInfo.name,.) != 0 )&&(strcmp(FileInfo.name,.) !=0) string newPath = folderPath + + FileInfo.name; dfsFolder(newPath, fout); else fout<< folderPath<< << FileInfo.name<< ; while(_findnext(Handle, &FileInfo) = 0); _findclose(Handle); fout.close(); 在判断有无子目录的if分支中,由于系统在进入一个子目录时,匹配到的头两个文件(夹)是.(当前目录),.(上一层目录)。需要忽略掉这两种情况。当需要对遍历到的文件做处理时,在else分支中添加相应的代码就好

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1