更改文件大小。 有一个更安全的版本;请参阅 _chsize_s。
语法
int _chsize(
int fd,
long size
);
参数
fd
引用打开的文件的文件描述符。
size
文件的新长度(以字节为单位)。
返回值
如果已成功更改文件大小,则 _chsize 返回值 0。 返回值 -1 表示错误:如果指定文件是只读的或针对访问锁定,则将 errno 设置为 EACCES;如果描述符无效,则将其设置为 EBADF;如果设备上没有可用空间,则将其设置为 ENOSPC;如果 size 小于零,则将其设置为 EINVAL。
有关返回代码的详细信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr。
注解
_chsize 函数扩展或截断与 fd 关联的文件,以达到 size 所指定的长度。 必须在允许写入的模式下打开文件。 如果扩展该文件,将追加 Null 字符 ('\0')。 如果文件被截断,则从缩短的文件的末尾到文件原始长度的所有数据都将丢失。
此函数验证其参数。 如果 size 小于零,或者 fd 是无效的文件描述符,则调用无效的参数处理程序,如参数验证中所述。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
| 例程 | 必需的标头 | 可选标头 |
|---|---|---|
_chsize |
<io.h> | <errno.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_chsize.c
// This program uses _filelength to report the size
// of a file before and after modifying it with _chsize.
#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <share.h>
int main( void )
{
int fh, result;
unsigned int nbytes = BUFSIZ;
// Open a file
if( _sopen_s( &fh, "data", _O_RDWR | _O_CREAT, _SH_DENYNO,
_S_IREAD | _S_IWRITE ) == 0 )
{
printf( "File length before: %ld\n", _filelength( fh ) );
if( ( result = _chsize( fh, 329678 ) ) == 0 )
printf( "Size successfully changed\n" );
else
printf( "Problem in changing the size\n" );
printf( "File length after: %ld\n", _filelength( fh ) );
_close( fh );
}
}
File length before: 0
Size successfully changed
File length after: 329678