6

在 C# WinForms 应用程序中,我使用 System.IO.Diagnostics.Process.Start(fileName) 打开文件。文件类型可以是 .doc、.docx、.xls、.xlsx、.csv、.pdf 或 .txt。

有没有办法强制这些文件以只读方式打开?

4

5 回答 5

14

您需要在开始该过程之前设置文件的文件属性,然后在打开它时将它们设置回来。

例子:

var attributes = File.GetAttributes(path);

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

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

File.SetAttributes(filePath, attributes);

注意:这将更改实际文件的文件属性,因此请记住这一点。

于 2009-10-26T17:29:02.387 回答
9

不幸的是,这样做的方式会随着文件的类型而改变。

最好的选择是检查ProcessStartInfo.Verbs属性以获取文件类型的已知动词。这通常是“OpenAsReadOnly”。然后,您将设置该动词,并使用ProcessStartInfo启动该过程。

请意识到 - 这不适用于每种类型的文件,因为它取决于程序提供和处理适当的动词。

于 2009-10-26T17:24:44.000 回答
2

您可以将文件复制到临时位置,然后使用临时文件启动程序吗?

然后您可以监视该过程并在其退出时删除临时文件?

于 2009-10-26T17:30:35.223 回答
1

Process.Start 启动与该文件关联的任何程序。您不能指示它以只读方式打开文件,除非程序支持命令行参数来指示它应该以只读方式打开(或者如果它支持 OpenAsReadOnly 动词)。

您可以在打开文件之前将文件的文件属性设置为只读,但我认为这不是您想要的。

于 2009-10-26T17:24:59.367 回答
0

取决于注册的应用程序是否具有支持只读模式的开关/选项。如果是这样,您可以传入只读选项。对于您的情况,如果没有只读选项,我认为 Process.Start 不能。

于 2009-10-26T17:27:19.020 回答