Доступ к папке запрещен

377
GREEN FIRETRUCK

Раньше у меня была эта проблема, но я всегда могу ее исправить, перейдя на вкладку «Безопасность» в свойствах, затем «Дополнительно», а затем в конце концов добавлю «Админ» в список разрешений доступа. Но в этом случае у меня фактически есть приложение Windows Forms, в котором я использую этот код:

FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

в C #.

Все это прекрасно работало внутри Visual Studio, но как только я собрал проект, установил программу на свой компьютер и запустил ее, он создал эту папку.

Почему-то я не могу получить разрешение обычным способом. Это просто дает мне сообщение: «У вас нет разрешения на просмотр или редактирование настроек разрешений этого объекта». Я не знаю почему. Может кто-нибудь подскажите, пожалуйста, как получить разрешение или сразу удалить папку? И что пошло не так в моей программе и вызвало это?

0
Это в корне C: \? Если это так, создайте подпапку. DrMoishe Pippik 5 лет назад 0

2 ответа на вопрос

0
D.J.

Вы всегда можете взять на себя ответственность, если у вас есть необходимый доступ администратора. После того, как вы вступите во владение, вам придется закрыть окна свойств, а затем, когда вы вернетесь назад, вы сможете изменить разрешения. Я не могу говорить об изменениях в вашем коде, но держу пари, что у вас нет «владельца» папки.

Хорошо, что-то странное случилось. Эта папка просто исчезла ... Я не знаю, как и почему, но ее больше нет, я запустил свою программу (нужную программу, а не только в Visual Studio), и на этот раз она работала отлично, Она создала папку и предметы внутри, и он работает нормально ... Что только что произошло? GREEN FIRETRUCK 5 лет назад 0
Если бы мне пришлось угадывать, папка, которая была там, уже существовала под другой учетной записью, и как только она была удалена, ваша программа теперь может создать свою собственную. Это была часть, которую я не мог понять из вашего поста, и это график того, как это произошло. Обычно, когда вы запускаете какую-либо программу, она будет выполняться под маркером безопасности того, кто ее выполняет, если вы не предпримете конкретные действия. Исключение составляют папки, созданные системными учетными записями, а что нет. D.J. 5 лет назад 0
0
user2634333

Вам также нужно позвонить, SetAccessControlчтобы применить изменения.

ds = di.GetAccessControl(); ds.AddAccessRule(fsar); di.SetAccessControl(ds); // nothing happens until you do this 

Кажется, что примеры на MSDN очень не хватает в деталях, как обсуждалось здесь . Я взломал код из этой статьи, чтобы получить следующее, которое ведет себя хорошо:

static bool SetAcl() { FileSystemRights Rights = (FileSystemRights)0; Rights = FileSystemRights.FullControl;  // *** Add Access Rule to the actual directory itself FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights, InheritanceFlags.None, PropagationFlags.NoPropagateInherit, AccessControlType.Allow);  DirectoryInfo Info = new DirectoryInfo(destinationDirectory); DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);  bool Result = false; Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);  if (!Result) return false;  // *** Always allow objects to inherit on a directory InheritanceFlags iFlags = InheritanceFlags.ObjectInherit; iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;  // *** Add Access rule for the inheritance AccessRule = new FileSystemAccessRule("Users", Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow); Result = false; Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);  if (!Result) return false;  Info.SetAccessControl(Security);  return true; } 

Похожие вопросы