#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, и мне это действительно начинает нравиться. 🙂