发信人: riffle() 
整理人: yangcs(2000-02-26 14:57:27), 站内信件
 | 
 
 
    在bc3.1 for dos下,有个函数叫chsize,其功能是将文件
 设置成指定的长度(加长或缩短)。具体用法如下:
 
 #include <string.h>
 #include <fcntl.h>
 #include <io.h>
 
 int main(void)
 {
    int handle;
    char buf[11] = "0123456789";
 
    /* create text file containing 10 bytes */
    handle = open("DUMMY.FIL", O_CREAT);
    write(handle, buf, strlen(buf));
 
    /* truncate the file to 5 bytes in size */
    chsize(handle, 5);
 
    /* close the file */
    close(handle);
    return 0;
 }
 
 以上是bc3.1自带帮助中的EXAMPLE。
 
 chsize函数对应于中断21H的4201H功能调用。
 
 《PC中断大全》相关内容如下:
 
 中断21H - 功能3DH
 “OPEN” - 打开现存文件。
 
 中断21H - 功能3EH
 “CLOSE” - 关闭文件。
 
 中断21H - 功能3FH
 “READ” - 从文件或设备中读。
 
 中断21H - 功能40H
 “WRITE” - 写入文件或设备。
 
 中断21H - 功能41H
 “UNLINK” - 删除文件。
 
 中断21H - 功能42H
 “LSEEK” - 设置当前文件位置。
 目的:定位到文件中的指定位置。
 适用对象:DOS 2.0 或更高版本。          限制:无。
 调用时的寄存器:                        返回时的寄存器:
 AH = 42H                               CF清零 若成功
 AL = 移动的原点                         DX:AX = 以字节计的从文件
     00H 文件起点                                 起点算起的新文件
     01H 当前文件位置                             位置
     02H 文件终点                        CF 置位 出现错误时
                                         AX = 错误代码(01H,06H)
                                          (见功能59H)
 BX = 文件句柄
 CX:DX = 离开新文件位置原点的偏移量
 细节:对原点01H和02H来说,指针可在文件之前定位;在此情况不返回错误,
 但后继的占据I/O的尝试则将产生错误。如果新的位置处在当前文件终点之外,
  则文件将会被下一次写入而扩充(见功能40H)。
 
 
 PASCAL中相应的函数好象是Truncate吧,很久不用,记不清了。
 
 对于WINDOWS下,也有相应的API函数截段或扩充文件长度,各编译器更是
 各自有所封装,这里就不讨论了。
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.40.5]
  | 
 
 
 |