这可能是一个愚蠢的问题,但我似乎无法创建一个可由机器上的所有用户写入的文本文件,它们总是由当前登录的用户拥有。
有什么想法吗?我应该使用TextFile还是TFileStream?
答案 0 :(得分:6)
我认为OP想知道 where 来创建所有用户都可写的文件。 如果是这样,Windows意识形态规定应在SHGetFolderPath(CSIDL_COMMON_DOCUMENTS)返回的目录中创建此类文件,或者可能是CSIDL_COMMON_APPDATA
答案 1 :(得分:3)
如果你创建一个文件,它只会继承其父容器的权限,换句话说就是它所在的文件夹。所以你只需要在具有必要权限的文件夹中创建它。
答案 2 :(得分:1)
“机器上的所有用户都可写”是什么意思?
你的意思是你是由一个用户创建一个文件,然后是另一个用户来尝试写入该文件,它会失败吗?
或者您是指用户创建文件,同时连接到同一台计算机的其他用户(通过终端会话)在第一个用户写入文件时无法写入文件?
如果是第一种情况,文件保存在哪里?它是否在所有用户都具有写入权限的文件夹中?
如果是第二种情况,您可以打开文件进行读/写而不锁定它:
var
Stream : TFileStream;
begin
Stream := TFileStream.Create('D:\MyFile',fmOpenReadWrite + fmShareDenyNone);
try
finally
Stream.Free;
end;
end;
请注意这样的代码,多个用户可能会互相覆盖!
答案 3 :(得分:1)
您是在谈论该文件的NTFS权限吗?如果是,您需要查看用于NT安全API的Delphi包装器,并使用该API更改文件安全设置以允许Everyone组访问该文件。如果您只是在打开文件时讨论共享访问权限,那么上面的vcldeveloper已经给出了答案。