在 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 不能。