在Delphi中创建一个文件,具有任何用户的写入权限

时间:2010-11-17 16:35:39

标签: delphi

这可能是一个愚蠢的问题,但我似乎无法创建一个可由机器上的所有用户写入的文本文件,它们总是由当前登录的用户拥有。

有什么想法吗?我应该使用TextFile还是TFileStream?

4 个答案:

答案 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已经给出了答案。