Domanda

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

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

È stato utile?

Soluzione

È necessario impostare gli attributi del file prima di avviare il processo e quindi ripristinarli 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 del file effettivo , quindi tienilo a mente.

Altri suggerimenti

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

L'opzione migliore è controllare ProcessStartInfo.Verbs per un verbo noto per il tuo tipo di file. Questo è in genere "OpenAsReadOnly". Impostare quindi quel verbo e avviare il processo con un ProcessStartInfo .

Realizza: non funziona con tutti i tipi di file, poiché spetta al programma fornire e gestire un verbo appropriato.

È 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?

Process.Start avvia qualunque programma sia associato a quel file. Non è possibile indicare ad esso di aprire il file in sola lettura, a meno che il programma non supporti un argomento della riga di comando per indicare che deve essere aperto in sola lettura (o se supporta il verbo OpenAsReadOnly).

Potresti impostare gli attributi del file sul file in sola lettura prima di aprirlo, ma non penso che sia quello che vuoi.

Dipende da se l'applicazione registrata ha l'opzione / opzione per supportare la modalità di sola lettura. In tal caso, puoi passare all'opzione di sola lettura. Per il tuo caso, non credo che Process.Start possa se non esiste un'opzione di sola lettura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top