我编写了一个文件转换器,它将dwfx文件转换为tiff格式。它有两种操作方式。首先是手动转换,即使目标或源文件夹具有只读属性,用户也会选择输入文件夹和输出文件夹以及文件转换。第二种是通过服务运行,其中转换作为服务进行。我在这里面临的问题是,无论何时我执行与服务相同的过程,它都会显示只读文件的拒绝访问权限。我尝试通过代码删除或更改属性,但它显示system.unauthorized access exception
。我还尝试使应用程序成为完全信任的应用程序,因此添加了app.manifest仍然事件日志显示相同的错误。我正在运行该服务作为具有管理员权限的本地帐户。我不明白该怎么做。
我的代码是
private bool GetFolderAccess(string sDirectory)
{
try
{
//Commented lines are for changing the permission when the exception is thrown everytime.
/*DirectoryInfo info = new DirectoryInfo(sDirectory);
WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent();
DirectorySecurity ds = info.GetAccessControl();
ds.AddAccessRule(new FileSystemAccessRule(self.Name,FileSystemRights.FullControl,InheritanceFlags.ObjectInherit |InheritanceFlags.ContainerInherit,PropagationFlags.None,AccessControlType.Allow));
info.SetAccessControl(ds); */
FileStream fs = new FileStream(sDirectory + "testfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter s = new StreamWriter(fs);
s.Dispose();
File.Delete(sDirectory + "\\testfile.txt");
return true;
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.ToString());
return false;
}
}
请告诉我该怎么做。任何帮助表示赞赏。 谢谢
答案 0 :(得分:0)
您可以使用File.SetAttribute Method并提供各种FileAttributes。 您也可以使用GetAccessControl。
以下是一个例子:
public static bool HasWritePermissionOnDir(string path)
{
var writeAllow = false;
var writeDeny = false;
var accessControlList = Directory.GetAccessControl(path);
if (accessControlList == null)
return false;
var accessRules = accessControlList.GetAccessRules(true, true,
typeof(System.Security.Principal.SecurityIdentifier));
if (accessRules ==null)
return false;
foreach (FileSystemAccessRule rule in accessRules)
{
if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write)
continue;
if (rule.AccessControlType == AccessControlType.Allow)
writeAllow = true;
else if (rule.AccessControlType == AccessControlType.Deny)
writeDeny = true;
}
return writeAllow && !writeDeny;
}
修改强>
更改权限:
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
// Remove read only property of the file.
File.SetAttributes(file, attributes & ~FileAttributes.ReadOnly);
}
此外,尝试在管理模式下运行Visual Studio
<强> EDIT2:强>
您也可以使用:
FileInfo fileInfo = new FileInfo(pathToAFile);
fileInfo.IsReadOnly = false;
fileInfo.Refresh();