繁体   English   中英

使用使用C#开发的Windows Service锁定和解锁文件夹

[英]Lock and Unlock a folder using windows service developed using c#

我知道类似的问题已经问过很多次了,但是没有任何一项与我的要求相符。 如果匹配,请随时将我引向正确的答案。

我有一个用c#,.net framework 4.6开发的Windows服务。
Windows服务每隔1个小时就会从其他服务接收一次任务(此问题无关紧要)。它实际上处理接收到的任务。每个任务的执行大约需要10-15分钟才能完成。 在执行任务期间,它会在服务器的一个文件夹中生成多个文件。
在App.config中,我保存了folderpath。 举例来说,我的appsetting的值为“ C:\\ Test”。
每个任务都有一个taskid,例如说Task1。 因此,我们创建了一个文件夹,例如“ C:\\ Test \\ Task1”。 所有文件都在这里生成。 并且一旦执行完成,该文件夹就被删除。

现在,我的要求是从接收任务开始到执行完成为止,我必须锁定生成这些文件的文件夹。
完成执行后,我需要立即解锁该文件夹。通过锁定,我的意思是,没有人应该能够打开该文件夹。

我知道文件可以被锁定。 但是如何在这里锁定文件夹。 任何人都可以在这里帮助我或为我推荐正确的文章。
这会很有帮助。非常感谢!

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

首先,您必须创建一个临时windows account 为什么? 仅允许一个用户访问此指定目录,并删除对其他帐户的访问。 您可以使用System.Security.AccessControl命名空间中提供的DirectorySecurity类来完成此操作。

上面还附有一个示例。

PS: msdn上有类似的帖子

将文件锁定在磁盘上是很难做到的事情。 您可能要考虑的一种替代方法是改用Memory-Mapped文件 ,特别是非持久性 Memory-Mapped 文件

非持久性文件是与磁盘上的文件不关联的内存映射文件。 当最后一个进程处理完文件后,数据将丢失,并且垃圾回收将回收该文件。 这些文件适用于为进程间通信(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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM