Пакет.Исключение Open(): доступ к пути запрещен

#c#

#c#

Вопрос:

Я пытался решить эту проблему целый день, но независимо от того, что я делаю, я продолжаю получать одно и то же исключение: UnauthorizedAccessException было необработано при использовании строки (Package package = Пакет.Открыть (d.Полное имя, режим файла.Создать, доступ к файлу.Перезапись чтения))

Полный код является:

 NTAccount act = new NTAccount("c9lu-PC","c9lu");

DirectoryInfo d = System.IO.Directory.CreateDirectory(path);

DirectorySecurity security = d.GetAccessControl();

security.AddAccessRule(new    FileSystemAccessRule(act,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));

d.SetAccessControl(security);

using (Package package = Package.Open(d.FullName, FileMode.Create, FileAccess.ReadWrite))     // where the exception occurs
{

    PackageHelper.createPart(package, "/pages.zip" , MediaTypeNames.Application.Zip,
                    (stream) =>
                    {
                        using (var parts = ZipPackage.Open(stream, FileMode.Create))
                        {
                        }
                    }

                    );
}
  

Я действительно не знаю, в чем проблема, пожалуйста, помогите мне.

Ответ №1:

Может ли это иметь какое-то отношение к тому факту, что вы передаете каталог в первый параметр Package.Открыть вместо имени файла? Должно быть больше похоже на это:

 // This gives you a directory object. It's all a directory/folder. No File.
DirectoryInfo d = System.IO.Directory.CreateDirectory(path);

// So use the Combine method to create a full path to a file
string fileName = System.IO.Path.Combine(d.FullName, "pages.zip");

...
// Then use that full path to create the Package.
Package.Open(fileName, ...
  

Комментарии:

1. Привет, Тим, я на самом деле передаю полное имя каталога. Что я пытаюсь сделать, так это создать пакет внутри этого каталога, так как же мне указать путь к пакету?

2. Правильно, вы передаете полное имя каталога, но не имя файла. Вам нужно присвоить ему имя файла (каталог и имя файла). Я думаю, что вы по какой-то причине переместили эту часть в вызов createPart.

3. Если я использую только d.Name вместо d.FullName, которое исключение действительно исчезает, но после запуска программы внутри папки не создается пакет.

4. d.Name это все еще просто каталог. Вам нужно указать имя файла. Я дополню свой ответ примером кода.

5. огромное тебе спасибо, Тим! Это сработало! Это моя первая публикация в Stack Overflow, и мне это действительно начинает нравиться. 🙂