簡體   English   中英

如何以編程方式復制在Windows下鎖定的文件或文件夾?

[英]How do I copy a file or folder that is locked under windows programmatically?

什么是API調用來復制當前鎖定的文件。 我希望能夠使用.Net,但Win32調用也沒問題。

請隨意在Unix或任何其他操作系統上使用相同的功能。

您可以使用VSS(卷影復制服務,而不是Visual SourceSafe)API來實現此目的。 雖然功能強大,但這並不是一個易於使用的API: 在VSS下處理備份概述可以讓您了解所涉及的內容。

即使它是一個相對較新的API,但對VSS的.NET支持幾乎(並且不可原諒地)不存在。 您無法通過Interop調用大多數API,並且Framework文件函數將無法與VSS用於公開快照文件的內核命名空間一起使用。 作為獎勵,有可怕的32/64位和XP-vs-Vista問題,部署也令人興奮(微軟的負責團隊應該感到非常自豪!)

無論如何, AlphaVSS項目打算為.NET帶來完整的VSS功能,看起來非常有前景,盡管它還處於測試前階段。 它可能只是為你做的,它是開源的(Managed C ++)。

有關如何使用Win32執行操作的一個很好的示例,請參閱HoboCopy 該實用程序本身非常有用,並且SourceForge項目頁面也提供了完整的C ++源代碼。

幾乎與我對另一個問題的回答相同:

如果您使用的是Win32,那么正式的方法是將其標記為在重新啟動時移動,並要求用戶重新啟動。 要在重新引導時標記要移動的文件,請使用帶有MOVEFILE_DELAY_UNTIL_REBOOT標志的MoveFileEx

它是相同的功能,只是這次你沒有傳遞NULL作為目的地。

根據確切鎖定文件的內容,您可以執行System.IO.File.Copy(),也可以創建System.IO.BinaryReader和System.IO.BinaryWriter,並通過讀取塊來手動創建文件的副本。鎖定的文件並將它們寫入新文件。 我已經看到了一種方法是可能的,但另一種方法不是,基於文件被鎖定的原因。

這是“所有.NET”的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM