2009-10-26 20 views
5

W aplikacji C# WinForms używam System.IO.Diagnostics.Process.Start (fileName) do otwierania plików. Typ pliku może być .doc, .docx, .xls, .xlsx, .csv, .pdf lub .txt.Otwórz plik tylko do odczytu

Czy istnieje sposób na wymuszenie otwarcia plików tylko do odczytu?

Odpowiedz

11

Musisz ustawić atrybuty plików pliku przed rozpoczęciem procesu, a następnie ustawić je ponownie po otwarciu.

Przykład:

var attributes = File.GetAttributes(path); 

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

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

File.SetAttributes(filePath, attributes); 

Uwaga: Spowoduje to zmianę atrybutów pliku, który rzeczywisty, więc miej to na uwadze.

+0

To właściwie nie to samo, co otwarcie pliku w trybie tylko do odczytu w większości programów. Wiele programów (takich jak Word) pozwala otwierać pliki tylko do odczytu, nie zmieniając samego pliku. Zobacz moją odpowiedź dla szczegółów. –

+0

@Reed Tak, przeczytałem twoją odpowiedź, zanim dodałem tę. Dodałem to ze względu na różnorodność rozszerzeń plików wskazanych przez OP. Myślałem, że to będzie bardziej "gwarancja, że ​​nie zadzieraj z plikiem". – Joseph

+0

prawie 7 lat później ... dzięki – elmer007

8

Niestety sposób zmiany tej wartości zależy od rodzaju pliku.

Najlepszą opcją jest sprawdzenie właściwości ProcessStartInfo.Verbs dla znanego czasownika dla danego typu pliku. Zazwyczaj jest to "OpenAsReadOnly". Następnie ustawisz czasownik i rozpoczniesz proces od ProcessStartInfo.

Po prostu sobie sprawę - nie działa dla każdego rodzaju pliku, ponieważ do programu należy dostarczenie i obsłużenie odpowiedniego czasownika.

1

Process.Start uruchamia program powiązany z tym plikiem. Nie można go polecić, aby otworzyć plik jako tylko do odczytu, chyba że program obsługuje argument wiersza poleceń, aby wskazać, że powinien on otwierać się jako tylko do odczytu (lub jeśli obsługuje czasownik OpenAsReadOnly).

Można ustawić atrybuty pliku na pliku tylko do odczytu przed jego otwarciem, ale nie sądzę, że jest to, co chcesz.

0

Zależy od tego, czy zarejestrowana aplikacja ma przełącznik/opcję obsługującą tryb tylko do odczytu. Jeśli tak, możesz przekazać opcję tylko do odczytu. W twoim przypadku nie myślę, że Process.Start może, jeśli nie ma opcji "tylko do odczytu".

2

Czy można skopiować plik do tymczasowej lokalizacji, a następnie użyć pliku tymczasowego do uruchomienia programu?

Następnie można monitorować proces i po jego zakończeniu usunąć plik tymczasowy?