访问资源 's' 之前未设置权限
No permission set for resource 's' before accessing it
我收到以下代码的 Klockwork 错误,可能是什么问题?
注意 - 我的代码编译成功。只有 Klockworks 给出了这个错误。
错误,
在访问资源 's' 之前未设置权限
using (StreamWriter s = new StreamWriter("CDriveDirs.txt"))
{
s.WriteLine("Hello");
}
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");
}
}
根据 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))
{
// ...
}
}
我收到以下代码的 Klockwork 错误,可能是什么问题?
注意 - 我的代码编译成功。只有 Klockworks 给出了这个错误。
错误,
在访问资源 's' 之前未设置权限
using (StreamWriter s = new StreamWriter("CDriveDirs.txt"))
{
s.WriteLine("Hello");
}
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");
}
}
根据 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))
{
// ...
}
}