今天主要看看文件练习相关的函数

简单的看了一下C的文件操作函数:

1.打开文件

FILE *fopen(const char *filename,const char *mode)

解释:这是c提供的一个文件操作函数,若打开成功,则返回一个指向该文件的指针(注意不是句柄,从这也可看出指针跟句柄的区别),mode常用取值列表如下

文件打开方式 含义
"w"(只写) 为输出打开一个文本文件
"r"(只读) 为输入打开一个文本文件
"a"(追加) 追加内容
"w+"(读/写) 为读/写建立一个新文本文件
"r+"(读/写) 为读/写打开一个文本文件
"a+"(读/写) 为读/写打开一个文本文件

2。关闭文件

int fclose(FILOE *fp);

3.读文件

int fgetc(FILE *fp)   //从打开的文件中读取一个字符,指针后移一位

size_t fread(VOID *buffer,size_t size,size_t count,FILE *fp)

解释:buffer是指向数据存放缓冲区的指针,size是单个字符的字节数,count是一次读取多少个size的数据.若函数执行成功,则返回实际读取的字符数。

4.写文件

int fputc(FILE *fp);

size_t fwrite(VOID *buffer,size_t size,size_t count,FILE *fp) ;//跟读文件是一样的,这里就不记了。

另外有一个非常常用的函数,fprintf函数,其原型是

int fprintf(FILE *fp,const char *format[,argument].....);

在这里举个实例便于理解:

char buffer[]="world";                     //定义并赋值一个字符串

FILE fp;                                         //定义一个文件指针

if(fp=fopen("c:\test.txt","a")==NULL)  //打开文件test.txt,并判断操作是否成功

exit(0);                                       //若失败,则退出

fprintf(fp,"hello %s",buffer);           //把hello和字符串buffer中的内容追加入文件test.txt

5.指针定位

由于这类函数用的比较少,这里只简单记一下函数名及其功能

void rewind(FILE *fp);//指针返回文件开始

int fseek(FILE *fp,long offset,int origin);//指针定位到指定位置

long ftell(FILE *fp);//返回文件指针相对于文件开头的位置

以上介绍的都是c提供的对文件的操作函数,其实windows提供了一些功能更强大的API函数供开发人员使用,虽说微软推荐使用API函数来处理文件,但个人还是不太习惯,主要是参数过多,很多功能用不到,所谓杀鸡焉用宰牛刀,所以只有在迫不得已的时候才使用API,下面介绍几个常用的:

BOOL DeleteFile(LPCTSTR  lpFileName); //删除文件,lpFileName为完整文件名

创建目录函数CreateDirectory;其原型如下,第二个参数为目录的安全性设置,通常为NULL

BOOL CreateDirectory(

LPCTSTR lpPathName,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

);

文件的复制和重命名可以用CopyFile()函数实现,其源代码如下:

BOOL CopyFile(

LPCTSTR SrcFileName,    //完整源文件名

LPCTSTR DesFileName,  //完整目标文件名

BOOL bFailIfExits;

)

文件和目录的移动都可以用RemoveFlie()实现,并且当移动目录时会强制移动目录下的所有文件和子目录,

BOOL MoveFile(

LPCTSTR SrcFileName,   //源路径

LPCTSTR  DesFileName,  //目标路径

)

最后介绍两个有关文件属性相关的函数

DWORD GetFileAttributes(LPCTSTR  lpFileName);

该函数若执行成功,则返回文件的属性,否则返回0xFFFFFFFF.

BOOL SetFileAttributes(

LPCTSTR lpFileName,

DWORD dwFileAttributes

);
该函数设置文件属性,第二个参数取值范围如下:

dwFileAttributes取值 含义解释
FILE_ATTRIBUTES_ARCHIVE 存档文件
FILE_ATTRIBUTES_COMPRESSED 压缩文件
FILE_ATTRIBUTES_DERECTORY 文件夹
FILE_ATTRIBUTES_ENCRYPTED 加密文件
FILE_ATTRIBUTES_HIDDEN 隐藏文件
FILE_ATTRIBUTES_NORMAL 正常
FILE_ATTRIBUTES_OFFLINE 脱机文件
FILE_ATTRIBUTES_READONLY 只读文件
FILE_ATTRIBUTES_SYSTEM 系统属性
FILE_ATTRIBUTES_TEMPORARY 临时属性

至此,对于文件的操作已经都不是问题了,现在尝试编写一个小应用,实现批量重命名功能.

步骤:1.  用GetModuleFile()函数获取程序所在目录filepath

2 . .获取目录下所有符合条件的文件名,并将这些文件名存在一个集合(set)中,涉及到的函数有_FindFrist(),    _FindNext();   _FindClose(),这些函数都包含在<io.h>头文件中。后面会详细介绍一下这些函数

3.循环实现文件重命名,CopyFile();

4.很重要的一步,CopyFile()函数之后记得删除原来的文件DeleteFile();

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函数返回回来的句柄。

_finddata_t结构体定义如下::
struct _finddata_t {

  unsigned   attrib;
   time_t     time_create;   
   time_t     time_access;   
   time_t     time_write;
   _fsize_t   size;
   char       name[260];
};

time_t,其实就是long
而_fsize_t,就是unsigned long
现在来解释一下结构体的数据成员吧。
attrib,就是所查找文件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。

time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和文件最后被修改的时间。
size:文件大小
name:文件名。

至此,批量重命名的引用就完全可以实现了,至于具体的代码实现,明天在做,今天就到这了

windows编程一日一练(2)相关推荐

  1. Windows编程一日一练(1)

    首先,编程和旅游是我个人人生两大爱好,所以,每天空闲的时候我喜欢敲敲代码,或者看看别人写的程序,实在是很惬意.今天想看看window编程,争取坚持每日一练.        windows程序主要是由微 ...

  2. windows编程一日一练(3)

    今天把上次的批量重命名功能的具体代码写了出来,逻辑思维虽然比较顺畅,但由于还没有很多的编程经验,程序代码有点冗余,登不上大雅之堂,看起来也不如专业人士的规范,这点以后要慢慢形成好的编程习惯.下面是代码 ...

  3. Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数

    要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...

  4. python 编程一日一练-python每日一练

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...

  5. Windows API一日一练(1)第一个应用程序

    要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...

  6. python 编程一日一练-「每日一练」巧用python生成随机数

    原标题:「每日一练」巧用python生成随机数 随机数在我们的生产和生活中有很多的应用场景,比如说登录验证的随机数字等等,那么你知道在Python中怎么生成随机数吗? 往下看,就是这么简单! 题目 p ...

  7. python 编程一日一练-Python每日一练0022

    问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: l = [5, 2, 4, 1, 2, 4, 5, 6, 8] with op ...

  8. python 编程一日一练-Python每日一练0013

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用collections库的ChainMap类,可以快速的将多个d ...

  9. Windows API一日一练(2)使用应用程序句柄

    从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符 ...

最新文章

  1. Java基础学习总结(21)——数组
  2. mysql +hive 安装
  3. PyCharm社区版支持深度学习_在Windows的Ubuntu子系统运行支持CUDA的深度学习代码
  4. django的 信号
  5. 金山词霸没有响应, 金山词霸与卡巴冲突问题解决方法?
  6. 计算机科学与技术专业实训手册,计算机专业实习工作手册.doc
  7. 这就是江湖——浅析芯片架构演变的爱恨情仇
  8. python设置桌面壁纸后重启电脑失效解决方案
  9. 小程序学习日记-微信5-蓝牙方式发现共享单车蓝牙设备
  10. 八年,腾讯优图攒了多厚的技术“家底”?
  11. android实现地图功能实现,Android快速实现地图功能(不仅快!而且小!)
  12. 【直播升级——AWS 云之旅】
  13. 用计算机演奏的生日快乐歌,51单片机演奏音乐“祝你生日快乐”
  14. 嵌入式系统232串口测试笔记
  15. [VLDB 2021]ICS-GNN_ Lightweight Interactive Community Search via Graph Neural Network
  16. 【web前端】移动端控制台插件,手机端页面查看相关页面控制台信息
  17. ResNet50 ResNeXt-50(32x4d)
  18. 广西大学计算机仿真实验,计算机仿真(matlb)实验一(广西大学电气).doc
  19. 高可用集群软件--LifeKeeper
  20. Java面试题整理一(反射)

热门文章

  1. 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...
  2. 《助推》读书笔记-行为经济学
  3. HTML5 Canvas
  4. 如何迁移完整SQL数据库到另外一台服务器
  5. IOS内置safari浏览器日期字符串转Date对象失败
  6. 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
  7. CentOS常用指令
  8. iOS 开发问题 书籍 价值 改名 创业大赛app
  9. (C#) 调用执行批处理文件
  10. 关于ActiveMQ的一点总结