deleteFileA 函式 (fileapi.h)

刪除現有的檔案。

若要以交易作業的形式執行此作業,請使用 DeleteFileTransacted 函式

語法

BOOL DeleteFileA(
  [in] LPCSTR lpFileName
);

參數

[in] lpFileName

要刪除的檔案的名稱。

根據預設,名稱限制為MAX_PATH個字元。 若要將此限制延伸至 32,767 寬字元,請在路徑前面加上 「\\?\」。 如需詳細資訊,請參閱命名檔案、路徑與命名空間

提示

從 Windows 10 版本 1607 開始,您可以選擇移除MAX_PATH限制,而不需在前面加上 「\\?\」。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間 的一節。

傳回值

如果函式成功,則傳回非零的值。

如果函式失敗,傳回值為零, (0) 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

如果應用程式嘗試刪除不存在的檔案, DeleteFile 函式會 失敗並ERROR_FILE_NOT_FOUND。 如果檔案是唯讀檔案,則函式會失敗並 ERROR_ACCESS_DENIED

下列清單會識別刪除、移除或關閉檔案的一些秘訣:

  • 若要刪除唯讀檔案,您必須先移除唯讀屬性。
  • 若要刪除或重新命名檔案,您必須擁有檔案的刪除許可權,或刪除父目錄中的子許可權。
  • 若要以遞迴方式刪除目錄中的檔案,請使用 SHFileOperation 函式
  • 若要移除空的目錄,請使用 RemoveDirectory 函 式。
  • 若要關閉開啟的檔案,請使用 CloseHandle 函 式。
如果您設定的目錄具有刪除和刪除子系以外的所有存取權,而且繼承了 (ACL) 新檔案的存取控制清單,則您可以建立檔案,而不需要刪除它。 不過,您可以建立檔案,然後取得您在建立檔案時傳回給您之控制碼上要求的所有存取權。

如果您在建立檔案時要求刪除許可權,您可以使用該控制碼刪除或重新命名檔案,但不能使用任何其他控制碼來重新命名。 如需詳細資訊,請參閱 檔案安全性和存取權限

如果應用程式嘗試刪除已開啟一般 I/O 之其他控制碼的檔案,或做為記憶體對應檔案,則 DeleteFile 函式會失敗, (FILE_SHARE_DELETE 必須在開啟其他控制碼時指定) 。

DeleteFile 函式會在關閉時標示要刪除的檔案。 因此,在關閉檔案的最後一個控制碼之前,不會刪除檔案。 後續呼叫 CreateFile 以開啟 檔案失敗,並ERROR_ACCESS_DENIED。

符號連結行為—

如果路徑指向符號連結,則會刪除符號連結,而不是目標。 若要刪除目標,您必須呼叫 CreateFile 並指定 FILE_FLAG_DELETE_ON_CLOSE

在Windows 8和Windows Server 2012中,下列技術支援此函式。

技術 支援
伺服器訊息區 (SMB) 3.0 通訊協定 Yes
SMB 3.0 透明容錯移轉 (TFO) Yes
具有向外延展檔案共用的 SMB 3.0 (SO) Yes
叢集共用磁片區檔案系統 (CsvFS) Yes
彈性檔案系統 (ReFS)
 

範例

如需範例,請參閱 鎖定和解除鎖定檔案中的位元組範圍

注意

fileapi.h 標頭會將 DeleteFile 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程式碼,可能會導致編譯或執行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 fileapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CloseHandle

CreateFile

DeleteFileTransacted

檔案管理功能

符號連結