如何在Turbo Pascal(DOS)环境下移除文件属性?
在Turbo Pascal(DOS)中移除文件属性的方法
Turbo Pascal本身没有专门的“移除文件属性”函数,但可以通过调用DOS中断INT 21H的功能43H来实现——该功能既可以获取文件属性,也能修改属性,移除属性本质是将目标属性位从当前属性值中清零。
实现思路
- 调用
INT 21H/43H的子功能00H获取文件当前属性; - 用位运算
AND (NOT 目标属性)将需要移除的属性位清零; - 调用
INT 21H/43H的子功能01H将修改后的属性写回文件。
代码示例
首先需要引用Dos单元(提供寄存器类型和中断调用接口):
uses Dos; const // 定义DOS文件属性常量,方便调用 FA_READONLY = $01; // 只读属性 FA_HIDDEN = $02; // 隐藏属性 FA_SYSTEM = $04; // 系统属性 FA_ARCHIVE = $20; // 归档属性 procedure RemoveFileAttr(const FileName: string; AttrToRemove: Byte); var Regs: Registers; begin // 第一步:获取文件当前属性 Regs.AH := $43; Regs.AL := $00; // 子功能00H:获取属性 Regs.DS := Seg(FileName[1]); Regs.DX := Ofs(FileName[1]); // 传递文件名的段地址和偏移地址 Intr($21, Regs); // 调用DOS中断 if (Regs.Flags and FCarry) <> 0 then Exit; // 如果CF标志置位,说明获取失败(如文件不存在),直接退出 // 第二步:移除指定属性(清零对应位) Regs.CX := Regs.CX and (not AttrToRemove); // 第三步:设置修改后的属性 Regs.AH := $43; Regs.AL := $01; // 子功能01H:设置属性 Intr($21, Regs); end;
使用示例
// 移除TEST.TXT的只读属性 RemoveFileAttr('TEST.TXT', FA_READONLY); // 同时移除隐藏和系统属性 RemoveFileAttr('SYSTEM.DAT', FA_HIDDEN or FA_SYSTEM);
注意事项
- 文件名需符合DOS的8.3命名格式;
- 若操作失败(如文件不存在、权限不足),中断会置位CF标志位,可根据需求添加错误处理逻辑;
- 归档属性(
FA_ARCHIVE)通常由DOS自动管理,手动移除需谨慎。
内容的提问来源于stack exchange,提问作者Born34
相关产品推荐
相关产品推荐

