如何移动当前正在使用的文件

Windows 95 和 Windows NT 分别提供了一种独特的方法,来帮助应用程序删除、替换或重命名正在使用的文件和目录。尽管这两个平台实现这些方法的方式有所不同,但它们具有一个共同的整体策略,即由应用程序指定要处理的文件,然后系统在重新启动时对这些文件进行处理。本文阐述应用程序如何使用各个 Windows 平台提供的方法。
更多信息
在 Windows NT 中移动文件
在 Windows NT 上运行的基于 Win32 的应用程序应结合使用 MoveFileEx() 和 MOVEFILE_DELAY_UNTIL_REBOOT 标志来移动、替换或删除当前正在使用的文件和目录。在系统下次重新启动时,Windows NT 启动程序就会移动、替换或删除指定的文件和目录。

要移动或替换正在使用的文件或目录,应用程序必须同时指定位于同一卷(例如,驱动器 C:)上的源路径和目标路径。如果目标路径是现有文件,它将被覆盖。如果目标路径是现有目录,它不会被覆盖并且源路径和目标路径都将保持不变。下面是一个移动或替换文件或移动目录的调用示例:    // Move szSrcFile to szDstFile next time system is rebooted
   MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);
    
要删除文件或目录,应用程序必须将目标路径设置为 NULL。如果源路径是一个目录,则只有在它为空时才能将它删除。请注意,如果您必须使用 MoveFileEx() 将文件从某个目录中删除,则必须重新启动计算机,然后才能调用 MoveFileEx() 来删除该目录。下面是一个如何删除文件或清空目录的示例:    // Delete szSrcFile next time system is rebooted
   MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
    
在 Windows 95 中移动文件
Windows 95 没有实现 MoveFileEx(),但是它为所有基于 Win32、基于 16 位 Windows 和基于 MS-DOS 的应用程序提供了另一种移动、替换或删除当前正在使用的文件(但不是目录)的方法。此功能是通过名为 Wininit.ini 的文件的 [rename] 节实现的。如果 Windows 目录中存在 Wininit.ini 文件,Wininit.exe 会在系统启动时处理该文件。处理完 Wininit.ini 后,Wininit.exe 会将其重命名为 Wininit.bak。

[rename] 节的语法如下:    DestinationFileName=SourceFileName
    
DestinationFileName 和 SourceFileName 必须位于同一卷上并且必须是短 (8.3) 文件名,因为 Wininit.ini 在保护模式的磁盘系统加载之前被处理,而长文件名只有在保护模式的磁盘系统正在运行时才可用。在 Wininit.ini 中使用长文件名指定的目标和源文件会被忽略。

[rename] 节可以包含多行,每行一个文件。要删除文件,请将 DestinationFileName 指定为 NUL。下面是一些项的示例:    [rename]
   NUL=C:/TEMP.TXT
   C:/NEW_DIR/EXISTING.TXT=C:/EXISTING.TXT
   C:/NEW_DIR/NEWNAME.TXT=C:/OLDNAME.TXT
   C:/EXISTING.TXT=C:/TEMP/NEWFILE.TXT
    
第一行删除 Temp.txt。第二行将 Existing.txt 移动到一个新目录。第三行移动并重命名 Oldname.txt。第四行用 Newfile.txt 覆盖现有文件。

应用程序不能使用 WritePrivateProfileString() 将项写入 [rename] 节,因为可能有多个具有相同 DestinationFileName 的行,当 DestinationFileName 为“NUL”时尤其如此。相反,应通过分析 Wininit.ini 并将各个项追加到 [rename] 节的末尾来添加项。

注意:请始终使用不区分大小写的搜索来分析 Wininit.ini,因为 [rename] 节的标题和其中的文件名可能包含大小写字母的任意组合。

使用 Wininit.ini 的应用程序应检查 Windows 目录中是否存在该文件。如果存在 Wininit.ini,则自系统上次重新启动以来,其他应用程序已向该文件写入了数据。因此,该应用程序应打开该文件并向 [rename] 节中添加项。如果不存在 Wininit.ini,则该应用程序应创建该文件并向 [rename] 节中添加项。这样做可确保您的应用程序不会无意中删除其他应用程序写入的项。

要在系统重新启动之前撤消文件重命名操作,必须从 Wininit.ini 文件的 [rename] 节中删除相应的行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值