在C#WinForms應用程序中,我使用System.IO.Diagnostics.Process.Start(fileName)打開文件。文件的類型可以是.doc,.docx,.xls,.xlsx,.csv,.pdf或.txt。打開文件只讀
有沒有辦法強制這些文件以只讀方式打開?
在C#WinForms應用程序中,我使用System.IO.Diagnostics.Process.Start(fileName)打開文件。文件的類型可以是.doc,.docx,.xls,.xlsx,.csv,.pdf或.txt。打開文件只讀
有沒有辦法強制這些文件以只讀方式打開?
您需要在啓動過程之前設置文件的文件屬性,然後在打開它時將其設置回來。
例子:
var attributes = File.GetAttributes(path);
File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly);
System.IO.Diagnostics.Process.Start(fileName);
File.SetAttributes(filePath, attributes);
注:這將改變實際文件的文件屬性,所以記住這一點。
不幸的是,這樣做的方式隨文件類型而改變。
最好的選擇是檢查文件類型爲已知動詞的ProcessStartInfo.Verbs屬性。這通常是「OpenAsReadOnly」。然後,您將設置該動詞,並以ProcessStartInfo開始流程。
只要認識到 - 這不適用於每種類型的文件,因爲它取決於提供和處理適當動詞的程序。
Process.Start啓動與該文件關聯的任何程序。您不能指示它以只讀方式打開文件,除非程序支持命令行參數以指示它應該以只讀方式打開(或者它支持OpenAsReadOnly謂詞)。
打開文件之前,您可以將文件的文件屬性設置爲只讀,但我不認爲這是您想要的。
取決於註冊的應用程序是否具有支持只讀模式的開關/選項。如果是這樣,您可以傳入只讀選項。對於你的情況,我不認爲如果沒有隻讀選項,Process.Start可以。
您可以將文件複製到臨時位置,然後使用臨時文件啓動程序?
然後你可以監視進程,並在退出時刪除臨時文件?
這實際上與在大多數軟件中以只讀模式打開文件並不相同。許多程序(如Word)允許您在不更改文件本身的情況下以只讀方式打開文件。詳情請參閱我的回答。 – 2009-10-26 17:32:17
@Reed是的,我在添加這個之前閱讀了你的答案。我添加了這個,因爲OP指出的各種文件擴展名。我認爲這將是更多的「保證不會弄亂文件」的答案。差不多7年後... – Joseph 2009-10-26 17:36:34
......謝謝 – elmer007 2016-07-15 13:56:01