Я бы посоветовал вам изучить File.SetAccessControl()
метод и FileSecurity
класс. В частности, документация FileSecurity
предоставляет полный пример изменения списка управления доступом к файлу (набор разрешений) для данного файла. Вот упрощенная версия этого примера, которая дает всем право на чтение и запись для C:\TEMP\junk.txt
:
using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
class WorldWrite
{
static void Main()
{
string filename = @"C:\TEMP\junk.txt";
if (!File.Exists(filename)) {
Console.WriteLine("No such file " + filename);
return;
}
/* Get the previous ACL, add a rule to give everyone read
* and write permission, and write back the resulting ACL. */
FileSecurity fileACLs = File.GetAccessControl(filename);
fileACLs.AddAccessRule(new FileSystemAccessRule(
// For everyone
new SecurityIdentifier (
WellKnownSidType.WorldSid,
null /* domain SID; ignored for Everyone */
),
// Allow read and write (of data and metadata),
// but not delete or execute
FileSystemRights.Read | FileSystemRights.Write,
AccessControlType.Allow
));
File.SetAccessControl(filename, fileACLs);
Console.WriteLine("Success!");
}
}
Я также обеспокоен тем, как вы указываете общий каталог данных приложения. Если вы жестко кодируете имя C:\Documents and Settings\All Users\Application Data
, тогда ваш код не будет работать в неанглийских версиях Windows, Vista или Windows 7. Может быть лучше использовать SpecialFolder
enum , чтобы найти правильный каталог для использования.