我在linux服務器上運行C++的代碼。在代碼中,我使用功能unlink(filename)
來刪除文件。由代碼本身生成的臨時文件正在成功刪除。但是我手動放入的文件,我的代碼無法刪除它們。可能是什麼原因?在linux上強制刪除一個使用C++的文件
回答
試試這個:
#include <errno.h>
#include <string.h>
...
if (unlink(filename) == -1) {
fprintf(stderr, "File '%s' unlink error (%d): %s\n", filename, errno, strerror(errno));
// or just use perror("unlink") for less customizable error message
// note: calling other functions before printing may change errno value
}
產生的錯誤信息應該透露的問題是什麼。
這裏的errno man page和unlink man page會告訴它可以返回什麼錯誤。
嗯,因爲這實際上是一個C++的問題,你可以和可能應std::cerr
取代fprintf
,但在這種情況下,它可能有必要先做int errtmp = errno
和使用,爲避免的iostream搞亂它在它被檢查之前。
如果您想明確表示它是頂級命名空間中的符號,那麼您至少也可以編寫::unlink(filename)
,至少有些人甚至在沒有必要時也會考慮這種良好實踐。
,對於例如rm -f
作品中,如果文件中有保護,不允許刪除它,它會嘗試更改文件保護和所有權,使用chmod()
和chown()
功能,「有可能的方式刪除文件「。如果用戶是root
或者文件實際上屬於運行程序的用戶,那麼這隻能保證能夠正常工作。
請注意,這會變得與系統有關,您無法編寫更改文件權限等的代碼,這種代碼可以在Windows和類Unix操作系統上運行,如果您想要這樣做,比如說Symbian OS,這將是如何做到的第三個變體。儘管在某些情況下可能會出現「Posix兼容」chmod()
。
'rm -f'不會嘗試更改權限;它只是壓制一些提示和錯誤報告。但是,C++ 17提供了'std :: filesystem'(基於Boost,natch),可以讓你操縱權限。 – 2017-10-04 07:07:14
- 1. 如何強制刪除一個文件
- 2. 如何在Linux上使用C++關閉文件時刪除文件?
- 3. 如何強制刪除C/C++中的鎖定文件?
- 4. 在C中刪除一個文件#
- 5. git push - 強制刪除遠程文件?
- 6. 如何使用exec在Linux上刪除文件
- 7. 如何使用PowerShell強制刪除打開的文件
- 8. 如何使用bash在Linux上的多個文件中刪除多行
- 9. 在Linux中刪除多個文件的名稱的一部分
- 10. 刪除一個文件樹,如果它已滿C使用C
- 11. 刪除文件強制即使它正在被其他進程
- 12. 使用C#在asp.net中刪除文件?
- 13. 強制HTTPS並刪除CodeIgniter上的index.php
- 14. 使用C#刪除超過一個月大的文件
- 15. 在C++中刪除LINUX文本文件中的行
- 16. 使用c刪除文件夾後刪除文件夾#
- 17. 強制刪除文件夾中的所有文件
- 18. C++ linux控制檯清除屏幕上的一個區域
- 19. 使用c刪除ntfs中的文件
- 20. 強制限制刪除
- 21. Linux中的強制文件編碼
- 22. 使用多個文件上傳時刪除單個文件Carrierwave
- 23. 強制參數不再起作用的文件夾刪除
- 24. 使用GrifFsTemplate.delete刪除GridFS上的文件
- 25. 如何在單個文件上強制使用HTTPS? (PHP)
- 26. 刪除Linux程序集中的一個文件x86
- 27. Codeigniter兩個文件上傳,一個強制和一個可選
- 28. 從文本文件在linux刪除文件整個線用2柱,用1柱
- 29. 在linux上刪除包含子文件夾和文件的文件夾
- 30. 強制一個Linux程序從另一個位置讀取的libc庫文件
「我的代碼無法刪除它們」 - 當您列出目錄內容時是否還能看到文件名?或者你是否僅僅觀察到光盤空間仍然被分配而不被回收? – 2013-03-08 11:42:30
我不熟悉那個函數,但它可能是文件權限的問題。 – SamGamgee 2013-03-08 11:43:12
@安德里亞斯:是的。即使在執行代碼後,這些文件仍然存在。 – sajal 2013-03-08 11:47:23