只读打开文件

6
在一个C# WinForms应用程序中,我使用System.IO.Diagnostics.Process.Start(fileName)打开文件。这些文件的类型可以是.doc、.docx、.xls、.xlsx、.csv、.pdf或.txt。是否有办法强制这些文件只能以只读方式打开?
5个回答

14

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

示例:

var attributes = File.GetAttributes(path);

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

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

File.SetAttributes(filePath, attributes);

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


这实际上与在大多数软件中以只读模式打开文件不同。许多程序(如Word)允许您在不更改文件本身的情况下以只读方式打开文件。有关详细信息,请参阅我的回答。 - Reed Copsey
@Reed 是的,我在添加这个答案之前已经看过你的答案了。我添加这个是因为OP指出了各种文件扩展名的多样性。我认为这会更像一个“保证不会破坏文件”的答案。 - Joseph

9

不幸的是,对于不同类型的文件,处理方式也不同。

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

请注意 - 由于程序是否提供并处理适当的动词取决于文件类型,因此这种方法并不适用于所有类型的文件。


2
你能将文件复制到临时位置,然后使用临时文件启动程序吗?接着你可以监控该进程,等它退出后再删除临时文件。请注意保留HTML标签。

1

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

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接