代码之家  ›  专栏  ›  技术社区  ›  CrazyCoder

使用c开发的windows服务锁定和解锁文件夹#

  •  2
  • CrazyCoder  · 技术社区  · 5 年前


    此windows服务每1小时从其他服务接收一个任务(这在本问题中不重要)。它实际处理它接收的任务。完成每个任务大约需要10-15分钟。 在任务执行期间,它会在服务器的一个文件夹中生成多个文件。
    在App.config中,我保存了folderpath。比如说,我有一个appsetting,它的值是“C:\Test”。
    每个任务都有一个taskid,例如Task1。所以我们创建了一个类似“C:\Test\Task1”的文件夹。所有文件都在这里生成。一旦执行完成,这个文件夹就会被删除。

    现在,我的要求是,从它接收任务到执行完成,我必须锁定生成这些文件的文件夹。
    我需要解锁文件夹一旦执行被发现。锁定我的意思是,没有人应该能够打开这个文件夹。


    那会很有帮助的。非常感谢!

    2 回复  |  直到 5 年前
        1
  •  0
  •   kowsikbabu    5 年前

    这是可能的,我认为有不止一种方法可以做到这一点。

    首先,您必须创建一个临时 windows account DirectorySecurity 系统安全访问控制 命名空间。

    它还附带了一个例子。

    附言:类似的职位可以在 msdn

        2
  •  0
  •   Rob    5 年前

    锁定 Memory-Mapped files :

    非持久化文件是与磁盘上的文件不关联的内存映射文件。最后一个进程处理完文件后,数据将丢失,垃圾回收将回收该文件。这些文件适用于为进程间通信(IPC)创建共享内存。

    下面是一个非常简短的示例,演示如何创建一个非持久化内存映射文件,并对其进行写入和读取:

    static void Main(string[] args)
    {
        var file = CreateFile("Mary had a little lamb, its fleece was white as snow...");
    
        var contentFromFile = ReadFile(file);
    
        Console.WriteLine(contentFromFile);
    }
    
    private static MemoryMappedFile CreateFile(string content)
    {
        var file = MemoryMappedFile.CreateNew("temp.csv", 1048576);
    
        using (var stream = file.CreateViewStream())
        {
            using (var writer = new StreamWriter(stream))
            {
                writer.WriteLine(content);
            }
        }
    
        return file;
    }
    
    private static string ReadFile(MemoryMappedFile file)
    {
        using (var stream = file.CreateViewStream())
        {
            using (var reader = new StreamReader(stream))
            {
                var contentReadFromStream = reader.ReadLine();
                return contentReadFromStream;
            }
        }
    }