C语言实现文件系统访问

9 篇文章 1 订阅

_finddata_t结构体是用来存储文件各种信息的结构体,使用这个结构体要引用的头文件为“ #include <io.h>

struct _finddata_t
{
    unsigned attrib;	// 文件属性		
    time_t time_create;     // 文件创建时间
    time_t time_access;     // 文件最后一次被访问的时间
    time_t time_write;      // 文件最后一次被修改的时间
 	_fsize_t size;          // 文件的大小(字节数表示)
    char name[_MAX_FNAME];  // 文件的文件名
}

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

如何使用这个结构体才能够将文件的信息存储到该结构体的内存空间呢,这就需要_findfirst()、_findnext()和_fineclose()三个函数的搭配使用。

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

返回值:

如果查找成功的话,将返回一个long型的唯一的查找用的句柄。这个句柄将会在_findnext函数中被使用。失败返回-1.

参数:

        filespec:标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。

        fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体所分配的内存空间中。

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

返回值:

若成功返回0,否则返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

int _findclose( long handle );

返回值:

成功返回0,失败返回-1。

参数:

handle :_findfirst函数返回回来的句柄。

实例

#include<stdio.h>
#include<io.h>
#include<Windows.h>
 
int main(void)
{
	long Handle;
	struct _finddata_t FileInfo;
   char *path = "D:/test/*"
	Handle=_findfirst(path , &FileInfo);
	if(-1==Handle)
        return -1;
        
	printf("%s\n",FileInfo.name);
	while(!_findnext(Handle,&FileInfo))
	{
        printf("%s\n",FileInfo.name);
	}
	_findclose(Handle);
	system("pause");
	return 0;
}

删除文件

int remove( char const* _FileName ); \\删除文件
void Remove()
{
    int done;
    int i;
 
    struct _finddata_t ffblk;
    char *documenttype[3] = {"C://Windows//System32//*.dll"};
    for (i = 0; i < 3; i++)
    {
        done = _findfirst(documenttype[i],&ffblk);    
        remove(ffblk.name);
 
        while (!_findnext(done,&ffblk))
        {
            remove(ffblk.name);
        }
        
        _findclose(done);
    }
}  

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值