Странная ошибка при открытии пакета для записи - PullRequest
7 голосов
/ 05 мая 2011

Перво-наперво, я использую .NET 4.

Я пытаюсь записать некоторые файлы в пакет, и когда я делаю это, я сталкиваюсь с чем-то странным:

using (var package = Package.Open(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
    // do something with package
}

Package относится к System.IO.Packaging.Package.

Странно то, что метод Package.Open выдает исключение, которое говорит:

Невозможно получить поток с помощью FileMode.Create, FileMode.CreateNew, FileMode.Truncate, FileMode.Append, когда доступ имеет FileAccess.Read.

Я нашел старый отчет об ошибке 2009 года в Microsoft Connect: http://connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong

Но это не помогает.

Так, у кого-нибудь есть идея?

1 Ответ

6 голосов
/ 05 мая 2011

Я думаю, что нашел проблему.

Когда я изменил код, чтобы сделать это:

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
}

И он больше не падает, и, кажется, работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...