這可能是一個愚蠢的問題,但我似乎無法創建一個文本文件,該文件可由機器上的所有用戶寫入,它們始終由當前登錄的用戶。在Delphi中創建一個帶有任何用戶寫入權限的文件
任何想法?我應該使用TextFile還是TFileStream?
這可能是一個愚蠢的問題,但我似乎無法創建一個文本文件,該文件可由機器上的所有用戶寫入,它們始終由當前登錄的用戶。在Delphi中創建一個帶有任何用戶寫入權限的文件
任何想法?我應該使用TextFile還是TFileStream?
通過的SHGetFolderPath返回目錄中創建如果您創建一個文件時,它會簡單地繼承父容器的權限,換句話說,在文件夾它駐留在哪裏。所以你只需要在具有必要權限的文件夾中創建它。
你是什麼意思「由機器上的所有用戶可寫」?
你的意思是你創建一個用戶的文件,然後另一個用戶來試圖寫入該文件,並失敗?
還是你的意思是用戶創建一個文件,當第一位用戶在其寫入誰是(通過終端會話)同時連接到同一臺機器上的其他用戶不能寫入文件?
如果是第一種情況,文件保存在哪裏?它是否在所有用戶都有寫入權限的文件夾中?用這樣的代碼
var
Stream : TFileStream;
begin
Stream := TFileStream.Create('D:\MyFile',fmOpenReadWrite + fmShareDenyNone);
try
finally
Stream.Free;
end;
end;
。注意到,多個用戶可能會相互覆蓋:
如果是第二種情況,你可以打開該文件進行讀/寫無鎖吧!
這是第一種情況,文件是在c:\ ProgramData中創建的。我所看到的代碼使用'舊式'Pascal文件訪問,我想將其全部更改爲使用TFileStream,因爲我知道這是有效的。 – Mmarquee 2010-11-17 17:12:47
你的意思是流:= TFileStream.Create('D:\ MyFile',fmOpenReadWrite或fmShareDenyNone);對?! :-P – ComputerSaysNo 2010-11-18 00:55:27
@Dorin:+運算符具有與按位或運算符相同的效果。 – vcldeveloper 2010-11-18 01:47:24
您是否在談論文件的NTFS權限?如果是的話,你需要看看Delphi的包裝爲NT安全API,並使用該API更改文件安全設置,以允許每個人組訪問該文件。如果你只是在打開文件時談論共享訪問),上面的vcldeveloper已經給出了答案。
德爾福包裝爲NT的安全API:聽起來像絕地武士Windows安全庫又名Jwscl:d – Remko 2010-11-17 20:07:35
我覺得OP想知道哪裏創建所有用戶文件可寫。 如果是這樣,視窗思想決定什麼這樣的文件應該在(CSIDL_COMMON_DOCUMENTS)或probabably CSIDL_COMMON_APPDATA
或者使用Win32 API'SetFileSecurity()'函數來設置對文件限制較少的權利。 – 2010-11-18 02:43:43
好吧,當然你可以做到這一點,但最終你會得到一堆噩夢般的ACL,這些ACL很快變得無法管理。無論如何,除非你有足夠的權利這是基本問題,否則它將無法運作。 – 2010-11-18 20:39:05
看來你正試圖寫入C:\ ProgramData這是一個受限制的權限文件夾。普通用戶對該文件夾的默認權限是讀取和執行,列出文件夾內容,讀取。這實際上是問題的核心。您需要找到一個更合適的位置來查找您的文件。 – 2010-11-18 20:41:32