首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开文件ReadOnly

打开文件ReadOnly
EN

Stack Overflow用户
提问于 2011-02-11 09:07:32
回答 4查看 81.9K关注 0票数 60

目前,我是这样打开一个文件来读取它的:

代码语言:javascript
复制
 using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
    //do stuff
}

如何在ReadOnly模式下打开该文件,以便在另一个进程同时打开该文件时,我的程序仍然可以读取它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-11 09:30:00

典型的问题是另一个进程打开了要写入的文件。所有标准的File方法和StreamReader构造函数都使用FileShare.Read打开文件。这是不能工作的,这就拒绝了写共享。你不能拒绝写,另一个进程是第一个获得写访问权限的进程。因此,您将被拒绝访问。

您必须使用FileShare.ReadWrite,如下所示:

代码语言:javascript
复制
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
using (var sr = new StreamReader(fs))
{
    // etc...
}

注意,你仍然会有一个棘手的问题,你正在读一个写了一半的文件。另一个过程在随机时间点将数据刷新到文件中,您很可能只读了半行文本。YMMV.

票数 140
EN

Stack Overflow用户

发布于 2011-02-11 09:11:41

如果要以只读方式打开文件,请尝试执行以下操作:

代码语言:javascript
复制
using (TextReader reader 
   = new StreamReader(File.OpenRead(Path.Combine(client._WorkLogFileLoc, "dump.txt")))) 
{     
         //do stuff 
} 

注意对File.OpenRead()的调用。

票数 14
EN

Stack Overflow用户

发布于 2011-02-11 09:10:25

您可以通过调用File.SetAttributes来设置文件属性

代码语言:javascript
复制
string path = Path.Combine(client._WorkLogFileLoc, "dump.txt");
FileAttributes curAttributes = File.GetAttributes(path);
File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4964588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档