2011-05-04 46 views
7

Lo primero es lo primero, estoy usando .NET 4.extraño error al abrir el paquete para escribir

Estoy intentando escribir algunos archivos a un paquete, y me encuentro con algo extraño cuando hago esto:

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

Package refiere a System.IO.Packaging.Package.

Lo extraño es que el método Package.Open lanza una excepción que dice:

No se puede obtener la corriente con FileMode.Create, FileMode.CreateNew, FileMode.Truncate, FileMode.APPEND cuando el acceso es FileAccess.Read .

me encontré con un viejo informe de error a partir de 2009 en Microsoft Connect: http://connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong

Pero no ayuda.

Entonces, ¿alguien tiene una idea?

+0

Parece que no tienes los permisos apropiados aquí .. –

+0

@Akram La parte divertida es que un archivo de 0 bytes termina siendo creado en 'filename'. –

+0

¿Funciona si utilizó FileAccess.Read? –

Respuesta

6

Creo que he encontrado el problema.

Cuando cambié de código para hacer esto:

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

Tengo un mensaje de error bastante decente:

No se puede paquete abierto porque FileMode o FileAccess valor no es válida para la corriente.

Creo que ese es el mensaje de error "real", y que alguien, en algún lugar, simplemente lo mezcló con ese sin sentido al hacer la localización.

Entonces cambió el código para esto:

// no FileAccess parameter 
using (var package = Package.Open(file, FileMode.OpenOrCreate)) 
{ 
    // do something with package 
} 

y TI ya no se bloquea, y parece funcionar correctamente.

+0

Eso es extraño. Buena captura, sin embargo. – jp2code

+0

+1 Dejar el parámetro de acceso al archivo parece resolverlo también. ¡Muy contenta de haber encontrado tus publicaciones! Estaba todo listo para tener una larga tarde trabajando en esto ... –

Cuestiones relacionadas