2009-10-26 3 views
5

In un'app C# WinForms, sto utilizzando System.IO.Diagnostics.Process.Start (fileName) per aprire i file. Il tipo di file può essere .doc, .docx, .xls, .xlsx, .csv, .pdf o .txt.Apri file di sola lettura

C'è un modo per forzare l'apertura di questi file in sola lettura?

risposta

11

È necessario impostare gli attributi di file del file prima di iniziare il processo e quindi reimpostarli all'apertura.

Esempio:

var attributes = File.GetAttributes(path); 

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

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

File.SetAttributes(filePath, attributes); 

Nota: Questo cambierà gli attributi di file del file effettivo, in modo da tenere a mente.

+0

In realtà non è come aprire il file in modalità di sola lettura nella maggior parte dei software. Molti programmi (come Word) consentono di aprire un file in sola lettura senza modificare il file stesso. Vedi la mia risposta per i dettagli. –

+0

@Reed Sì, ho letto la tua risposta prima di aggiungere questa. L'ho aggiunto a causa della varietà di estensioni di file indicate dall'OP. Ho pensato che sarebbe stata più una risposta alla "garanzia di non rovinare il file". – Joseph

+0

quasi 7 anni dopo ... grazie – elmer007

8

Sfortunatamente, il modo di procedere cambia con il tipo di file.

L'opzione migliore è verificare la proprietà ProcessStartInfo.Verbs per un verbo noto per il tipo di file. Questo è in genere "OpenAsReadOnly". Quindi avresti impostato quel verbo e avvii il processo con un ProcessStartInfo.

Basta realizzare - questo non funziona per ogni tipo di file, dal momento che spetta al programma fornire e gestire un verbo appropriato.

1

Process.Start avvia qualsiasi programma associato a tale file. Non è possibile istruirlo per aprire il file come di sola lettura, a meno che il programma supporti un argomento della riga di comando per indicare che deve essere aperto in sola lettura (o se supporta il verbo OpenAsReadOnly).

È possibile impostare gli attributi del file sul file in sola lettura prima di aprirlo, ma non penso che sia ciò che si desidera.

0

Dipende se l'applicazione registrata ha l'opzione di supporto per la modalità di sola lettura. In tal caso, puoi passare all'opzione di sola lettura. Per il tuo caso, non penso che Process.Start possa se non ci sono opzioni di sola lettura.

2

È possibile copiare il file in un percorso temporaneo e quindi utilizzare il file temporaneo per avviare il programma?

Quindi è possibile monitorare il processo e alla sua uscita, eliminare il file temporaneo?