You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Turbo Pascal(DOS)环境下移除文件属性?

在Turbo Pascal(DOS)中移除文件属性的方法

Turbo Pascal本身没有专门的“移除文件属性”函数,但可以通过调用DOS中断INT 21H的功能43H来实现——该功能既可以获取文件属性,也能修改属性,移除属性本质是将目标属性位从当前属性值中清零。

实现思路

  1. 调用INT 21H/43H的子功能00H获取文件当前属性;
  2. 用位运算AND (NOT 目标属性)将需要移除的属性位清零;
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:33:11