在C++ 17文件系統庫中,我們得到了std::filesystem::remove(path)
,據我瞭解,它是來自Boost.Filesystem的boost::filesystem::remove(path)
的直接端口。std :: remove和boost :: filesystem :: remove之間的區別?
但C++從C89繼承了一個非常類似的函數,稱爲std::remove(path)
,它是也是記錄爲從文件系統中刪除文件的一種方式。我隱約意識到這個功能的一些缺陷,例如我相信我聽說在Windows上,std::remove
不能用於刪除當前進程仍然保持打開的文件。
請問std::filesystem::remove
是否用std::remove
解決了這些問題?我應該更喜歡std::filesystem::remove
而不是std::remove
?或者前者只是後者的命名空間的同義詞,具有相同的瑕疵和陷阱?
我的問題的題目詢問boost::filesystem::remove(path)
和std::remove(path)
之間的差異,因爲我明白這std::filesystem::remove(path)
可能沒有被許多庫廠商的實現還,但我的理解是,它應該是的基本上都是直接拷貝提升版本。所以如果你知道Windows上的Boost.Filesystem,你可能也知道足以回答這個問題。
需要花一分鐘時間檢查'boost :: filesystem :: remove'的來源以知道它[簡單地調用'DeleteFileW'](https://github.com/boostorg/filesystem/blob/07619fb37007f45b54bc71877e724c8f4b014c9f/src /operations.cpp#L240)。 –
當您運用一些注意事項時,'filesystem'函數可以處理一般的Unicode路徑。特別是,在當前的實現中,不要依賴UTF-8的默認轉換,但明確地做到這一點。舊的'std :: remove'僅限於狹窄的執行字符集,我真誠懷疑任何Windows實現檢測到該執行字符集是UTF-8(因爲即使'filesystem'實現未能檢測到)。所以在Windows中,它只能處理來自Windows ANSI字符的路徑,這是系統特定的編碼。 –
@ Cheersandhth.-Alf:Windows C++實現如何檢測「執行字符集」是否爲UTF-8?這個實現定義了它自己的執行集(不需要檢測),或者它遵循Windows(它不允許UTF-8作爲默認字符集)。 – MSalters