没有为资源设置权限#39;在访问它之前

时间:2017-08-17 06:36:11

标签: c# klocwork

我在下面的代码中收到Klockwork错误,可能是什么问题?

注意 - 我的代码编译成功。只有Klockworks给出了这个错误。

错误,

没有为资源设置权限'在访问之前

using (StreamWriter s = new StreamWriter("CDriveDirs.txt"))
{
    s.WriteLine("Hello");
} 

2 个答案:

答案 0 :(得分:2)

Here是对此警告的一个很好的解释。

您需要为文件提供显式访问控制。

请尝试以下代码:

using (var fs = new FileStream(@"g:\temp_test.txt", FileMode.Append))
{
   fs.SetAccessControl(new FileSecurity(@"g:\temp_test.txt", AccessControlSections.Access));
   using (var s = new StreamWriter(fs))
   {
      s.WriteLine("Test");
   }
}

答案 1 :(得分:0)

根据Klocwork documentation for that message(Google是您的朋友!),这是因为...在使用之前,您没有明确设置流的权限。

这意味着:您可能正在创建文件,但您没有在文件上明确设置安全信息,这通常允许任何人访问其内容。 Klocwork认为您应该在创建文件时明确设置该信息(因此您可以遵循principle of least privilege)。

这样做的一种方法是:

using (var stream = new FileStream("d:\\test.blob", FileMode.Create))
{
    var security = new System.Security.AccessControl.FileSecurity();
    security.AddAccessRule(new FileSystemAccessRule(@"domain\user", FileSystemRights.Modify, AccessControlType.Allow));
    stream.SetAccessControl(security);

    using (var streamWriter = new StreamWriter(stream))
    {
        // ...
    }
}