在文件操作(1)中看到了apr对文件路径的处理,现在来看看看文件操作。
文件操作就那么几种:打开、关闭、写入、读取、复制、删除、重命名等。下面就看看apr是怎么做这些操作的。
首先看打开操作apr_file_open函数,apr_file_open先是把apr中定义的访问权限和文件属性都转换成相应的windows系统下的访问权限和文件属性值,最后调用了windows Api 函数CreateFile,而后就是构造出一个apr_file_t返回。
起重要作用的还是CreateFile这个API,CreateFile有内核版本和用户版本的,熟悉Windows编程的我们知道,CreateFile并不仅仅只能够创建文件,还能够创建其他的IO操作对象,具体可查Windows API,这里不多做解释。
【关闭操作】
apr_file_close来负责关闭文件,里面是调用了file_cleanup函数来关闭了文件句柄的,file_cleanup在上篇中已经分析过了的。
【删除操作】
apr_file_remove函数负责删除文件,其实质上是调用了Windows API函数DeleteFile。
【重命名】
apr_file_rename来完成文件的重命名,其调用了MoveFileEx来实现文件的重命名,其实就是移动文件。在Windows下 如果在同一个驱动器下移动文件,其实是只修改了文件的索引的,这一点,你懂的。。。。
【复制】
apr_file_copy负责文件的copy工作,就是对文件的复合操作打开-》读取-》关闭-》打开-》写入-》关闭。
【读取】
apr_file_read负责文件读取工作,我本来是猜测这个文件读取,用ReadFile就搞定了,结果看了下源码,并不是那么简单呐,里面原来还处理文件可重叠IO操作,而且还兼容了下命名管道了,甚是复杂撒,可将文件读取和写入单独分析下了。
【写入】
apr_file_write负责文件写入工作,此函数也小有复杂,不过最后还是调用了WriteFile来写入的。
srclib\apr\include\apr_file_io.h中还定义了许多文件操作函数,基本都是比较简单的操作,容易读滴很,我在项目中就常用这里代码来方便的自己的工作,像目录创建函数,我就从这apr中copy代码后,秀秀改改就用到自己项目中了,就一个字“爽”撒。