2014-02-25 41 views
1

我想在「d:\ test \」中寫一個文件,不幸的是我沒有該文件夾的寫權限。 如何檢查該文件夾是否具有寫入權限。如何檢查文件夾是否有寫權限或不在C++

注意:fopen是有幫助的,但是這是創建一個新文件。我不想創建exra文件。

我也看到CreateFile(),不知道如何使用這種情況。

+3

幾乎唯一正確的測試是嘗試寫入,並在失敗時作出反應。將測試與嘗試分開,幾乎不可避免地會導致競爭狀況。 –

+0

沒有嘗試寫入文件,沒有其他方式嗎? @jerry棺材 – bala

+1

@bala恐怕沒有。另一個例子是當你有寫權限的時候,但是沒有足夠的空間,所以即使你檢查權限,你以後也不能創建一個一致的文件。是的,檢查可用磁盤空間也會導致競爭狀況。 –

回答

2

只需打開(並寫入)該文件並分析系統返回的錯誤(如果有的話)。在單獨操作中檢查權限是否會導致競爭狀況,第一次調用告訴您可以創建文件,而第二次調用失敗是因爲訪問權限已在其中更改。

+0

至少在Windows上,您可以擁有沒有刪除文件權限的創建文件權限。這最終會留下很多陳舊的測試文件。 – RedX

+0

@RedX這是怎麼回事?我沒有建議創建測試文件... –

+0

@RedX我已經重新制定了,所以現在更清楚我的意思了。 –

2

選擇1:

您可以使用_access_access_s檢查,如果文件是有權限。

更多信息here

00 Existence only 
02 Write-only 
04 Read-only 
06 Read and write 

備選方案2:

正如你已經嘗試過CreateFile,使用GENERIC_WRITE爲您dwDesiredAccess

,然後看到錯誤,如果有的話。

更多細節here

PS:如果你反正只需要檢查(而不是寫/創建文件),刪除臨時文件,如果已創建。

+0

您的權利,我問任何其他方式嗎? – bala

+0

@bala更新回答_access –

+0

你有沒有試過這個?它不適合我。我用於該文件夾沒有寫權限的文件夾。 – bala

0

實際上,檢查您是否有權寫入的一種方法是使用security access functions。在那裏你可以查詢所有不同的權利(刪除,創建,寫,索引...)

我從來沒有使用過它們,所以我不能給你提供一個例子。

請記住,雖然檢查您的訪問權限和創建文件或寫入之間可能會改變訪問權限,它可能仍然會失敗。其他人提到的競爭條件。

如果你最終會創建一個文件,那麼只需使用其他人提到的CreateFile

相關問題