我想知道如何檢查我是否有權限寫入文件夾。檢查在Windows/Linux中寫入文件權限
我正在寫一個C++項目,我應該打印一些數據到一個result.txt文件,但我需要知道我是否有權限。
Linux和Windows之間的檢查不同嗎?因爲我的項目應該在Linux上運行,目前我正在Visual Studio中工作。
我想知道如何檢查我是否有權限寫入文件夾。檢查在Windows/Linux中寫入文件權限
我正在寫一個C++項目,我應該打印一些數據到一個result.txt文件,但我需要知道我是否有權限。
Linux和Windows之間的檢查不同嗎?因爲我的項目應該在Linux上運行,目前我正在Visual Studio中工作。
檢查權限的可移植方式是嘗試打開文件並檢查是否成功。如果沒有,errno
(從頭部<cerrno>
被設置爲值EACCES
[是,一個S],那麼你就沒有足夠的權限,這應該在兩個Unix/Linux和Windows工作示例標準輸入輸出:
FILE *fp = fopen("results.txt", "w");
if (fp == NULL) {
if (errno == EACCES)
cerr << "Permission denied" << endl;
else
cerr << "Something went wrong: " << strerror(errno) << endl;
}
IOSTREAMS會略微有點不同。據我所知,他們不保證設置在兩個平臺上errno
,或不僅僅是「失敗」的報告更具體的錯誤。
正如傑裏棺材寫道:不依靠單獨的訪問測試功能,因爲你的程序容易出現比賽條件和安全漏洞。
關於唯一合理的做法是嘗試創建該文件,如果失敗,則告訴用戶存在問題。任何提前測試的嘗試,只嘗試創建文件,如果您能夠創建並寫入文件,則可能會遇到來自競爭條件的問題(在您檢查時有權限,但在您嘗試時刪除了它使用它,反之亦然)和角落案例(例如,您有權限在該目錄中創建文件,但試圖在那裏寫入將超出您的磁盤配額)。要知道的唯一方法是嘗試...
實際測試文件寫入權限的最正確方法是嘗試寫入文件。原因是因爲不同的平臺以不同的方式顯示寫入權限。更糟糕的是,僅僅因爲操作系統告訴你可以(或不能)寫入文件,它可能實際上在撒謊,例如,在unix系統上,文件模式可能允許寫入,但文件處於只讀狀態媒體,或者相反,該文件實際上可能是內核爲進程自己使用而創建的字符設備,因此即使其文件模式設置爲全零,內核也允許該進程(並且只有該進程)使用它所有它喜歡的。
謝謝,但我仍然沒有站在如何我可以知道我是否有權寫入文件到磁盤。 – Aviadjo 2010-09-26 18:30:39
如果我嘗試並沒有權限,我認爲該程序將崩潰,我想通過檢查之前阻止它。有沒有檢查磁盤寫入權限的命令(寫入新文件)? – Aviadjo 2010-09-26 18:32:18
爲什麼你的程序崩潰? :S – 2010-09-26 18:57:12