如何移动当前正在使用的文件
Windows 95 和 Windows NT 分別提供了一種獨特的方法,來幫助應用程序刪除、替換或重命名正在使用的文件和目錄。盡管這兩個平臺實現(xiàn)這些方法的方式有所不同,但它們具有一個共同的整體策略,即由應用程序指定要處理的文件,然后系統(tǒng)在重新啟動時對這些文件進行處理。本文闡述應用程序如何使用各個 Windows 平臺提供的方法。
更多信息
在 Windows NT 中移動文件
在 Windows NT 上運行的基于 Win32 的應用程序應結合使用 MoveFileEx() 和 MOVEFILE_DELAY_UNTIL_REBOOT 標志來移動、替換或刪除當前正在使用的文件和目錄。在系統(tǒng)下次重新啟動時,Windows NT 啟動程序就會移動、替換或刪除指定的文件和目錄。
要移動或替換正在使用的文件或目錄,應用程序必須同時指定位于同一卷(例如,驅動器 C:)上的源路徑和目標路徑。如果目標路徑是現(xiàn)有文件,它將被覆蓋。如果目標路徑是現(xiàn)有目錄,它不會被覆蓋并且源路徑和目標路徑都將保持不變。下面是一個移動或替換文件或移動目錄的調用示例:??? // 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 沒有實現(xiàn) MoveFileEx(),但是它為所有基于 Win32、基于 16 位 Windows 和基于 MS-DOS 的應用程序提供了另一種移動、替換或刪除當前正在使用的文件(但不是目錄)的方法。此功能是通過名為 Wininit.ini 的文件的 [rename] 節(jié)實現(xiàn)的。如果 Windows 目錄中存在 Wininit.ini 文件,Wininit.exe 會在系統(tǒng)啟動時處理該文件。處理完 Wininit.ini 后,Wininit.exe 會將其重命名為 Wininit.bak。
[rename] 節(jié)的語法如下:??? DestinationFileName=SourceFileName
????
DestinationFileName 和 SourceFileName 必須位于同一卷上并且必須是短 (8.3) 文件名,因為 Wininit.ini 在保護模式的磁盤系統(tǒng)加載之前被處理,而長文件名只有在保護模式的磁盤系統(tǒng)正在運行時才可用。在 Wininit.ini 中使用長文件名指定的目標和源文件會被忽略。
[rename] 節(jié)可以包含多行,每行一個文件。要刪除文件,請將 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 覆蓋現(xiàn)有文件。
應用程序不能使用 WritePrivateProfileString() 將項寫入 [rename] 節(jié),因為可能有多個具有相同 DestinationFileName 的行,當 DestinationFileName 為“NUL”時尤其如此。相反,應通過分析 Wininit.ini 并將各個項追加到 [rename] 節(jié)的末尾來添加項。
注意:請始終使用不區(qū)分大小寫的搜索來分析 Wininit.ini,因為 [rename] 節(jié)的標題和其中的文件名可能包含大小寫字母的任意組合。
使用 Wininit.ini 的應用程序應檢查 Windows 目錄中是否存在該文件。如果存在 Wininit.ini,則自系統(tǒng)上次重新啟動以來,其他應用程序已向該文件寫入了數(shù)據(jù)。因此,該應用程序應打開該文件并向 [rename] 節(jié)中添加項。如果不存在 Wininit.ini,則該應用程序應創(chuàng)建該文件并向 [rename] 節(jié)中添加項。這樣做可確保您的應用程序不會無意中刪除其他應用程序寫入的項。
要在系統(tǒng)重新啟動之前撤消文件重命名操作,必須從 Wininit.ini 文件的 [rename] 節(jié)中刪除相應的行。
總結
以上是生活随笔為你收集整理的如何移动当前正在使用的文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手撕 CNN 经典网络之 AlexNet
- 下一篇: 手撕 CNN 之 AlexNet(PyT