Powerpoint開檔時,為什麼儲存後有些電腦會保留~$*.pptx,有些電腦卻會刪除。

布可 林 0 信譽點數
2025-07-18T07:16:16.92+00:00

我寫了個小工具來判斷*.pptx是否礎於開檔狀態。我觀察到當檔案開啟時,會產生一個*~$*.pptx

因此我始終以為這樣的判定是非常準確的也一直很正常使用。直到我換了台電腦後發現,PPT存檔後*~$*.pptx被刪除了,即便我還在編輯中,這個檔案也依舊不會再出現。一直到我關閉檔案,再手動點開這個PPT時,又會產生~$*.pptx*。

有趣的是我找了朋友跟同事的電腦測試,包含Windows 10/11,Office 2016/2021/365,沒有辦法找出一定的規律,有些電腦就是會持續保留*~$*.pptx* 有些電腦就是會在儲存時被刪除。
Excel/Word都始終會保留*~$*.xlsx或~$*.docx 。*

想了解這樣的差異為何,希望各路大神專家能幫助我解決這個小問題。

Microsoft 365 與 Office | PowerPoint | 商用版 | Windows
0 則留言 沒有留言

3 個回答

排序依據: 最新
  1. 熱情熄 心冷 5,575 信譽點數
    2025-07-18T11:52:33.1433333+00:00

    如果你檔案放本機,有用過 dcomcfg 設定 Automation 執行帳號,那對 ~$*.pptx 滑鼠右鍵,看看建立者,是該帳號沒刪,你的帳號刪不掉。

    如果你檔案放網路芳鄰或網路磁碟,問 IT ,通常表示該目錄 IT 沒有授權刪除。

    此回答有幫助嗎?

    0 則留言 沒有留言

  2. zwJimRaynor 2,411 信譽點數
    2025-07-18T08:03:21.83+00:00

    下午好林布可

    檢測檔案是否被打開應該使用 CreateFile 函數將 dwShareMode 設爲 0(獨占模式)后開啟檔案,從返回的狀態信息來判斷是否被開啓,如果為開檔狀態則會返回錯誤。

    詳細用法和參數請閲讀:建立和開啓檔案 - Win32 apps。

    至於 ~$<原檔案名> 這個檔案,它在一些時候可能被創建在其他路徑,且異常關閉時不會被回收所以不能拿來判斷。

    此回答有幫助嗎?

    0 則留言 沒有留言

  3. 匿名
    2025-07-18T07:50:33.63+00:00

    Hi, 布可 林

    歡迎來到 Microsoft Q&A 社群。 

    非常感謝您耐心等候我們處理此問題。 

    在 PowerPoint 中,存檔期間的重新命名/刪除步驟有時無法立即(或根本無法)重新建立擁有者檔案 (owner file),除非您關閉並重新開啟簡報。這種情況在 Word 或 Excel 中並不常見,它們能更可靠地重新建立鎖定。測試和報告顯示,這種情況可能因以下因素而異: 

    • Office 版本/組建: 永久授權版 (2016/2021) 與 Microsoft 365 (訂閱制) 在檔案處理上可能有所不同,這歸因於雲端整合或共同撰寫功能的更新,即使是本機檔案也可能受影響。 
    • 系統設定: Windows 10 與 11、檔案位置(本機磁碟 vs. 網路/OneDrive 同步資料夾)、權限或背景處理程序(例如防毒軟體干擾暫存檔)都可能產生影響。如果檔案位於 OneDrive 同補資料夾中,系統可能完全不會建立擁有者檔案,因為鎖定機制已轉移到雲端處理。 
    • 沒有明確的規律: 正如您所觀察到的,這種情況在不同設定下都難以預測。Microsoft 論壇和社群中也有類似的報告,指出 PowerPoint 中存在間歇性問題,但在 Word/Excel 中則沒有,這表明應用程式在釋放和重新取得檔案控制代碼的程式碼上存在差異。 

    由於此行為,依賴 ~$ 檔案是否存在來判斷 PowerPoint 檔案狀態並不可靠。建議您修改您的小工具,改為嘗試以獨佔鎖定方式開啟檔案來檢查其是否正在使用中。如果嘗試失敗(因為 PowerPoint 已將其開啟),則表示該檔案正在使用中。此方法在各個 Office 應用程式中都能穩定運作,並能避免暫存檔的異常問題。 

    以下是一個 C# 的範例(假設您的小工具是使用 .NET 開發;請根據您使用的語言進行調整): 

    using System;
    using System.IO;
     
    public class FileInUseChecker
    {
        public static bool IsFileInUse(string filePath)
        {
            try
            {
                // Attempt to open the file with exclusive access
                using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    stream.Close();
                }
                return false; // Opened successfully, so not in use
            }
            catch (IOException)
            {
                // IOException means file is locked/in use
                return true;
            }
            catch (Exception)
            {
                // Other errors (e.g., file not found)
                return false;
            }
        }
     
        public static void Main(string[] args)
        {
            string pptxPath = @"C:\Path\To\Your\File.pptx";
            if (IsFileInUse(pptxPath))
            {
                Console.WriteLine("File is open/in use.");
            }
            else
            {
                Console.WriteLine("File is not open.");
            }
        }
    }
    

    運作原理: FileShare.None 會請求獨佔存取權。如果 PowerPoint(或任何其他應用程式)已開啟該檔案,此嘗試將失敗並引發 IOException。 

    優點: 方法直接,不依賴 ~$ 檔案,適用於所有檔案類型,且能處理網路和本機檔案。 

    注意事項: 請確保您的小工具對該檔案擁有讀取權限。此方法無法偵測到以無鎖定的唯讀模式開啟的檔案。 

    如果此範例不適用於您小工具的語言/框架,請提供更多詳細資訊,以便我們為您提供更貼切的範例。關於此錯誤,您可透過 PowerPoint 的「意見反應」工具(檔案 > 意見反應)向 Microsoft 支援部門報告,並附上您的測試環境設定。如果受影響電腦上的檔案位於 OneDrive 資料夾中,請嘗試將其移動到非同步的位置進行測試。 

    感謝您的體諒與理解。如果您有任何其他需要,請隨時與我聯繫。 


    如果這個回答對您有幫助,請點擊「接受答案」並給予好評。 如果您對此回答有其他問題,請點擊「評論」。  

    Note:如果您希望收到此討論串的相關電子郵件通知,請依照「變更您的 : 變更您的Microsoft問答喜好設定 | Microsoft Learn 

    使用者影像

    此回答有幫助嗎?


您的回答

答案可由問題作者標示為「已接受」,而由仲裁者標示為「推薦」,這可協助使用者知道答案解決了作者的問題。