none
如何实现一个纯粹“只读"打开的文本文件?StreamReader()构造方式打开的不行? RRS feed

  • 问题

  • Hi,

    一个简单却想不明白的问题,请教大家。

    C# 写了一个consolechen程序,如下打开一个.txt 文件,读取一行。

             using (StreamReader sr = new StreamReader(path))
                {
                   sr.ReadLine();
                }

    单步跟踪,执行到ReadLine这一行时,在文件管理器中打开path对应的txt文件,修改另存时,竟然保存不了!

    按说,C#中这是reader,应该是只读打开,为什么另外的进程(如此处实验用的 文件管理器),无法修改保存呢?

    如果在C#代码中,要实现一个"纯粹只读"打开的文本文件,难道new StreamReader(path)方式不可以?要怎么做呢?

    谢谢。

    2020年1月22日 8:31

全部回复

  • Hi David,

    c#中的Steamreader是按照流的方式去读取文本文件,而且一旦文本文件被占用,我们就无法更改这个文件。因为此时的文本文件正在被c#中的程序所使用。

    如果你想要实现一个纯粹只读打开的文本文件,你可以参照以下代码。

     FileInfo fInfo = new FileInfo("D:\\test.txt");
    
                // Set the IsReadOnly property.
                fInfo.IsReadOnly = true;

    希望这会帮到你。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年1月23日 2:28
    版主
  • C#代码中,要实现一个"纯粹只读"打开的文本文件,难道new StreamReader(path)方式不可以?要怎么做呢?

    你的“纯粹只读”是不是说这个文件在被C#程序打开的时候,还可以被其它程序共享(只是C#本身只读,不去修改?)

    如果是这样的话,那么StreamReader不是一个好的方案;因为它是一个读文件的流。这个东西只负责读文件,内部不负责写或者更新文件。

    我建议你考虑使用StreamReader里边使用一个FileStream对象,因为该对象有FileShare,允许其它进程写文件的同时,你还可以照样读取内容。

    请参考:https://docs.microsoft.com/zh-cn/dotnet/api/system.io.filestream.-ctor?view=netframework-4.8#System_IO_FileStream__ctor_System_String_System_IO_FileMode_System_Security_AccessControl_FileSystemRights_System_IO_FileShare_System_Int32_System_IO_FileOptions_


    Reproduce your quesions with ScreenToGif is your choice. 
    For IIS: IIS Forum
    For WebSite of .NET: ASP.NET Forum
    For others: StackExchange
    For spam-sender or forum urgent issues, Send your Email at:  forumsfeedback@microsoft.com

    2020年2月13日 5:28
    版主