释放对文件的访问权限

Sae*_*eid 0 c# io

假设我们有3个进程,它们按顺序写入特定文件,在某些情况下,当进程想要写入进程关闭的文件时(在写入的中间),因此访问另外2个进程的文件有麻烦,我添加一个控制进程顺序的服务器进程,当进程关闭时会引发一个事件,那么当进程关闭时,如何在此事件中释放源(文件访问权限).就像是File.Release(FilePath);

编辑:

写入文件如下:

try {
        if(!File.Exists(FilePath))
            throw new Exception("File does not Exist.");

        bool Clear = false;
        using(StreamReader sr = new StreamReader(FilePath)) {
            if(sr.ReadToEnd().Length > 1200)
                Clear = true;
            }

        if(Clear)
            using(StreamWriter sw = new StreamWriter(FilePath, false)) {
                sw.WriteLine(Text);
                sw.Flush();
        } else
            using(StreamWriter sw = new StreamWriter(FilePath, true)) {
                sw.WriteLine(Text);
                sw.Flush();
        }
} catch(Exception ex) {}
Run Code Online (Sandbox Code Playgroud)

Kin*_*ing 5

using System.IO;

class Program
{
    static void Main()
    {
          using (StreamWriter writer = new StreamWriter("important.txt"))
          {
                writer.Write("Word ");
                writer.WriteLine("word 2");
                writer.WriteLine("Line");
          }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我们在使用时所指的示例类型,关键字"使用".切勿明确关闭streamwriter,也不要明确处理它.使用为你做了所有的魔力.它在工作完成时以及当您使用块时离开时处理.

在多线程环境中,如果你明确地使用close或dispose,那么考虑到线程可能只是在前一个线程处理它时尝试打开该对象时,线程会有问题.同步线程时会遇到问题.这是在服务器应用程序中通常遇到的问题,该应用程序具有运行到数据库中的多个连接.这就是我们需要像Idisposable一样使用它的原因.

C#USING关键字 - 何时何地不使用它?

这更多地解释了它.

更新:多个客户端同时写入单个文件是您的问题.如上面的人所说,在写入模式下,没有两个进程可以同时保持同一个文件.如果您编写大数据,它必须等待,这个等待时间非常明显,或者您可以从客户端收集对象,对它们进行排队并从服务器实际写入它们.还可以避免对服务器上的文件进行写访问.如果您的数据是序列化的,您可以使用谷歌协议缓冲区来传递数据.

如果您正在从客户端处理该文件,并且如果客户端进程在中途终止,则该文件现在将没有写入句柄,显然,另一个进程可以通过写访问获取其上的句柄.