2009-10-26 138 views
5

在C#WinForms應用程序中,我使用System.IO.Diagnostics.Process.Start(fileName)打開文件。文件的類型可以是.doc,.docx,.xls,.xlsx,.csv,.pdf或.txt。打開文件只讀

有沒有辦法強制這些文件以只讀方式打開?

回答

11

您需要在啓動過程之前設置文件的文件屬性,然後在打開它時將其設置回來。

例子:

var attributes = File.GetAttributes(path); 

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

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

File.SetAttributes(filePath, attributes); 

注:這將改變實際文件的文件屬性,所以記住這一點。

+0

這實際上與在大多數軟件中以只讀模式打開文件並不相同。許多程序(如Word)允許您在不更改文件本身的情況下以只讀方式打開文件。詳情請參閱我的回答。 – 2009-10-26 17:32:17

+0

@Reed是的,我在添加這個之前閱讀了你的答案。我添加了這個,因爲OP指出的各種文件擴展名。我認爲這將是更多的「保證不會弄亂文件」的答案。差不多7年後... – Joseph 2009-10-26 17:36:34

+0

......謝謝 – elmer007 2016-07-15 13:56:01

8

不幸的是,這樣做的方式隨文件類型而改變。

最好的選擇是檢查文件類型爲已知動詞的ProcessStartInfo.Verbs屬性。這通常是「OpenAsReadOnly」。然後,您將設置該動詞,並以ProcessStartInfo開始流程。

只要認識到 - 這不適用於每種類型的文件,因爲它取決於提供和處理適當動詞的程序。

1

Process.Start啓動與該文件關聯的任何程序。您不能指示它以只讀方式打開文件,除非程序支持命令行參數以指示它應該以只讀方式打開(或者它支持OpenAsReadOnly謂詞)。

打開文件之前,您可以將文件的文件屬性設置爲只讀,但我不認爲這是您想要的。

0

取決於註冊的應用程序是否具有支持只讀模式的開關/選項。如果是這樣,您可以傳入只讀選項。對於你的情況,我不認爲如果沒有隻讀選項,Process.Start可以。

2

您可以將文件複製到臨時位置,然後使用臨時文件啓動程序?

然後你可以監視進程,並在退出時刪除臨時文件?

相關問題