标签:
errno_t _chsize_s( int fd, __int64 size );
详见msdn知识库
_chsize将文件裁剪为指定大小,大小的度量方法与
long ftell(FILE * fp)
度量方法相同
第一个参数是文件信息句柄
open() close() 对应的是低级io,内存中没有缓存,直接对硬盘字符进行操作
fopen() fclose()对应的是高级io,内存中有缓存,在文件关闭(自动关闭前)不会写入硬盘
对于文件信息句柄,高级io通过
FILE * fopen(const char *file_name,const char *mode)
封装为指针(类指针)FILE,而低级io将文件句柄定义为int 型参数(磁盘扇区位号对应的唯一内存号)
_chsize()属于低级io ,需要使用
int _fileno( FILE *stream );
将FILE指针转换为低级io标识符,然后传给_chsize()函数进行操作
注意:
_chsize()在feof(fp)==1的情况下不能使用(也就是文件大小和pos值相同时),即使使用清除函数(clearerr() fseek() 等)也不行
所以,文件指针走到fp的时候可以直接写入,不需要裁剪。因为此时的size包含了feof。
要么减小size,要么直接写入
标签:
原文地址:http://www.cnblogs.com/liutianchen/p/5444785.html