2009-10-26 10 views
5

In einer C# WinForms App verwende ich System.IO.Diagnostics.Process.Start (fileName), um Dateien zu öffnen. Der Dateityp kann DOC, DOCX, XLS, XLSX, CSV, PDF oder TXT sein.Öffnen Sie die Datei schreibgeschützt

Gibt es eine Möglichkeit, diese Dateien schreibgeschützt zu öffnen?

Antwort

11

Sie müssen die Dateiattribute der Datei festlegen, bevor Sie den Prozess starten, und sie beim Öffnen wieder einrichten.

Beispiel:

var attributes = File.GetAttributes(path); 

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

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

File.SetAttributes(filePath, attributes); 

Hinweis: Dies wird das Dateiattribut der tatsächlichen Datei ändern, so sollte man nicht vergessen.

+0

Das ist eigentlich nicht das Gleiche wie das Öffnen der Datei im schreibgeschützten Modus in den meisten Software. Viele Programme (z. B. Word) ermöglichen es Ihnen, eine Datei schreibgeschützt zu öffnen, ohne die Datei selbst zu ändern. Siehe meine Antwort für Details. –

+0

@Reed Ja, ich habe deine Antwort gelesen, bevor ich diese hinzugefügt habe. Ich fügte dieses wegen der Vielzahl der Dateierweiterungen hinzu, die das OP angezeigt. Ich dachte, dies wäre eher eine "Garantie, nicht mit der Datei zu tun" Antwort. – Joseph

+0

fast 7 Jahre später ... danke – elmer007

8

Leider ändert sich die Art, dies zu tun, mit dem Dateityp.

Die beste Option ist, überprüfen Sie die ProcessStartInfo.Verbs -Eigenschaft für ein bekanntes Verb für Ihren Dateityp. Dies ist normalerweise "OpenAsReadOnly". Sie würden dann dieses Verb setzen und den Prozess mit einem ProcessStartInfo starten.

Nur realisieren - das funktioniert nicht für jede Art von Datei, da es an dem Programm liegt, ein entsprechendes Verb zu liefern und zu behandeln.

1

Process.Start startet das Programm, das dieser Datei zugeordnet ist. Sie können es nicht anweisen, die Datei als schreibgeschützt zu öffnen, es sei denn, das Programm unterstützt ein Befehlszeilenargument, um anzugeben, dass es als schreibgeschützt geöffnet werden soll (oder ob es das OpenAsReadOnly-Verb unterstützt).

Sie könnten Dateiattribute für die Datei auf schreibgeschützt setzen, bevor Sie sie öffnen, aber ich glaube nicht, dass Sie das wollen.

0

Hängt davon ab, ob die registrierte Anwendung einen Schalter/Option zur Unterstützung des schreibgeschützten Modus hat. Wenn ja, können Sie die schreibgeschützte Option übergeben. Für meinen Fall halte ich Process.Start nicht für schreibgeschützt.

2

Können Sie die Datei an einen temporären Speicherort kopieren und dann die temporäre Datei verwenden, um das Programm zu starten?

Dann könnten Sie den Prozess überwachen und beim Beenden die temporäre Datei löschen?