windows编程一日一练(2)
来源:互联网 发布:淘宝二手机可靠吗 编辑:程序博客网 时间:2024/05/01 11:47
今天主要看看文件练习相关的函数
简单的看了一下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
);
该函数设置文件属性,第二个参数取值范围如下:
含义解释
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 {
};
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)
- windows编程一日一练(2)
- Windows编程一日一练(1)
- windows编程一日一练(3)
- Windows编程一日一练(1)
- windows编程一日一练(3)
- 一日一练(2)
- windows API一日一练(5)
- windows API一日一练(6)
- Windows API一日一练(7)
- Windows API一日一练
- Windows API一日一练
- Windows API一日一练(2)使用应用程序句柄
- windowsAPI一日一练(2)
- 一日一练(1)
- Windows+API一日一练.zip
- Windows API一日一练(1)第一个应用程序
- Windows API一日一练(3)使用命令行参数
- Java的输入问题
- 嵌入式相关的推荐书籍
- alfresco 4.2.c 在Windows+Mysql 安装图解
- 第三次C程序设计上机报告
- Java开发环境的搭建
- windows编程一日一练(2)
- 用Ping命令快速检测网络故障
- 养生
- 关于在XenServer6.1中CentOS6.3安装XenServer Tools的问题
- Ubuntu修改源(解决国外源更新慢)
- 站柱
- handler知识点总结(很不错)
- Windows下在本机创建SVN服务
- 锤子ROM那些欠缺考虑的微创新们