如何移動目前正在使用中的檔案

文章翻譯 文章翻譯
文章編號: 140570 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

有時候 Win32 應用程式需要刪除、 重新命名,或移動目前系統所使用的檔案。一個常見例子是安裝程式需要在完成設定軟體套件時從使用者的硬碟移除本身。有時候,他們也需要移動目前系統所使用的裝置驅動程式。應用程式需要刪除或移動這些檔案的作業系統的協助。

Windows 95 和每個提供唯一的方法,幫助應用程式,以移除,Windows NT 取代,或重新命名檔案和目錄都在使用中。雖然兩個平台有不同的方式實作這些方法,共用整體的策略其中應用程式指定要處理,哪一個檔案,而當它重新開機時系統處理它們。本文將告訴您如何應用程式可以使用所提供的每個 Windows 平台的方法。

其他相關資訊

在 Windows NT 中移動檔案

Win32 架構在 Windows NT 上執行的應用程式應該使用 MoveFileEx() MOVEFILE_DELAY_UNTIL_REBOOT 旗標來移動、 取代,或刪除檔案與目前使用的目錄。下一次,系統開機 Windows NT bootup 程式將會移動,取代,或刪除指定的檔案和目錄。

若要移動或取代檔案或正在使用中的目錄,應用程式必須在相同的磁碟區上指定來源和目的地的路徑 (磁碟,例如機 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 架構和檢查 DOS 為主應用程式來移動、 取代,或刪除的檔案 (但不是目錄) 的目前使用中。這項功能是透過名為 Wininit.ini 一個檔的 [重新命名] 區段來實作。如果 Wininit.ini 出現在 Windows 目錄,Wininit.exe 系統開機時處理它。一旦處理 Wininit.ini Wininit.exe 重新命名它以 Wininit.bak。

[重新命名] 區段的語法是:
   DestinationFileName=SourceFileName
				
DestinationFileName 和 SourceFileName 必須位於相同的磁碟區,而且因為 Wininit.ini 處理載入保護的模式磁碟系統和受保護的模式磁碟系統執行時就只可以使用長檔名之前都必須短 (8.3) 檔案名稱。長檔名與 Wininit.ini 中所指定的目的和來源檔案會被忽略。

[重新命名] 區段可以有多重線路以每行一個檔案。若要刪除檔案,指定 [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() 寫入項目到 [重新命名] 區段,因為可以有多行具有相同的 DestinationFileName,特別是如果 DestinationFileName 是"NUL]。而是,他們應該剖析 Wininit.ini,並將項目附加至 [重新命名] 區段的結尾新增項目。

附註: 永遠會使用不區分大小寫的搜尋來剖析 Wininit.ini,因為標題的 [重新命名] 區段和檔案名稱,裡面可能有任何組合的大寫和小寫字母。

使用 Wininit.ini 的應用程式應該檢查它的存在 Windows 目錄中。如果 Wininit.ini 存在,然後另一個應用程式有寫入它,因為已上次重新啟動系統。因此,應用程式應該開啟它,並將項目新增到 [重新命名] 區段。如果 Wininit.ini 不存在,應用程式應該建立它,並新增到 [重新命名] 區段。這樣做可以確保的項目從其他應用程式將不會被刪除不小心由您的應用程式。

若要系統重新開機之前,請復原檔案重新命名作業,您必須從 Wininit.ini 檔的 [重新命名] 區段中移除對應的行。

屬性

文章編號: 140570 - 上次校閱: 2006年11月21日 - 版次: 4.3
這篇文章中的資訊適用於:
  • Microsoft Win32 Application Programming Interface?應用於:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows XP
關鍵字:?
kbmt kbapi kbfileio kbhowto kbkernbase kbprogramming KB140570 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:140570
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com