2009-10-26 39 views
5

En una aplicación C# WinForms, estoy usando System.IO.Diagnostics.Process.Start (fileName) para abrir archivos. El tipo de archivo puede ser .doc, .docx, .xls, .xlsx, .csv, .pdf o .txt.Abrir archivo de solo lectura

¿Hay alguna manera de forzar que estos archivos se abran solo lectura?

Respuesta

11

Debe establecer los atributos de archivo del archivo antes de iniciar el proceso y luego configurarlos cuando lo abrió.

Ejemplo:

var attributes = File.GetAttributes(path); 

File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly); 

System.IO.Diagnostics.Process.Start(fileName); 

File.SetAttributes(filePath, attributes); 

Nota: Esto va a cambiar los atributos de archivo del archivo de real, así que tenlo en cuenta.

+0

En realidad, no es lo mismo que abrir el archivo en modo de solo lectura en la mayoría del software. Muchos programas (como Word) le permiten abrir un archivo de solo lectura sin cambiar el archivo. Ver mi respuesta para más detalles. –

+0

@Reed Sí, leí su respuesta antes de agregar esta. Agregué esto debido a la variedad de extensiones de archivo que indicaba el OP. Pensé que esto sería más una respuesta de "garantía de no meterme con el archivo". – Joseph

+0

casi 7 años después ... gracias – elmer007

8

Desafortunadamente, la forma de hacerlo cambia con el tipo de archivo.

La mejor opción es verificar en la propiedad ProcessStartInfo.Verbs un verbo conocido para su tipo de archivo. Esto es típicamente "OpenAsReadOnly". Luego configuraría ese verbo y comenzaría el proceso con ProcessStartInfo.

Solo dame cuenta - esto no funciona para todo tipo de archivo, ya que depende del programa suministrar y manejar un verbo apropiado.

1

Process.Start inicia cualquier programa asociado a ese archivo. No puede indicarle que abra el archivo como de solo lectura, a menos que el programa admita un argumento de línea de comando para indicar que debe abrirse como de solo lectura (o si es compatible con el verbo OpenAsReadOnly).

Puede establecer los atributos de archivo en el archivo como de solo lectura antes de abrirlo, pero no creo que eso sea lo que desea.

0

Depende de si la aplicación registrada tiene interruptor/opción para admitir el modo de solo lectura. De ser así, puede pasar la opción de solo lectura. Para su caso, no creo que Process.Start pueda, si no es una opción de solo lectura.

2

¿Puede copiar el archivo a una ubicación temporal y luego usar el archivo temporal para iniciar el programa?

Entonces, ¿podría supervisar el proceso y, al salir, eliminar el archivo temporal?

Cuestiones relacionadas