#c# #.net #package
#c# #.net #пакет
Вопрос:
Перво-наперво, я использую .NET 4.
Я пытаюсь записать некоторые файлы в пакет, и я сталкиваюсь с чем-то странным, когда я делаю это:
using (var package = Package.Open(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
// do something with package
}
Package
относится к System.IO.Packaging.Package
.
Странная вещь заключается в том, что пакет.Метод Open выдает исключение, в котором говорится:
Не удается получить поток с FileMode.Создать, FileMode.Создайте новый файловый режим.Усечение, FileMode.Добавлять при доступе FileAccess.Read.
Я нашел старый отчет об ошибке 2009 года в Microsoft Connect:http://connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong
Но это не помогает.
Итак, у кого-нибудь есть идея?
Комментарии:
1. Похоже, у вас здесь нет соответствующих разрешений..
2. @Akram Забавно то, что файл размером 0 байт в конечном итоге создается в
filename
.3. Работает ли это, если вы использовали FileAccess. Читать?
4. @Akram Нет, та же ошибка. Но я сомневаюсь, что это сработает, учитывая, что я пытаюсь записать в файл…
5. Я знаю, это звучит глупо. Попробуйте FileAccess. Создайте на этот раз ..
Ответ №1:
Я думаю, что нашел проблему.
Когда я изменил код, чтобы сделать это:
using (var stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
using (var package = Package.Open(stream))
{
// do something with package
}
}
Я получил довольно приличное сообщение об ошибке:
Не удается открыть пакет, поскольку значение FileMode или FileAccess недопустимо для потока.
Я думаю, что это «реальное» сообщение об ошибке, и что кто-то где-то просто перепутал его с этим бессмысленным при выполнении локализации.
Затем я изменил код для этого:
// no FileAccess parameter
using (var package = Package.Open(file, FileMode.OpenOrCreate))
{
// do something with package
}
И он больше не вылетает и, кажется, работает должным образом.
Комментарии:
1. Это странно. Хорошая уловка, однако.
2. 1 Отключение параметра доступа к файлу, похоже, также решает эту проблему для меня. Конечно, рад, что нашел ваши сообщения! Я был полностью готов провести долгий вечер, работая над этим…