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

问题描述 投票:2回答:2

我知道类似的问题已经被问了很多次,但没有与我的要求相匹配。如果匹配,请随时告诉我正确的答案。

我在C#开发Windows服务,.NET框架4.6。 该窗口服务接收任务从其他服务每1个小时(这是没有重要性这个问题)。它实际处理其接收。它需要大约10-15分钟的执行完成每个任务的任务。任务的执行过程中,它在一个生成多个文件服务器的文件夹。 在App.config中,我有FOLDERPATH保存。例如说,我已经appsetting其值为“C:\测试”。 每个任务都有一个任务id,例如说这是任务1。因此,我们创建一个像“C:\测试\任务1”的文件夹。所有文件会在这里产生。而一旦执行完毕,该文件夹被删除。

现在,我的要求是从接收到任务的时间,直到执行完毕,我一定要锁定哪里如何产生这些文件的文件夹。 我需要尽快执行是finsihed.By锁我的意思是解锁的文件夹,没有人应该能够打开此文件夹。

我知道这些文件可以被锁定。但如何在这里锁定的文件夹。任何一个可以帮助我在这里还是告诉我正确的文章。 这将是非常help.Many的感谢!

c# windows windows-services .net-4.6
2个回答
0
投票

这是可能的,而且我觉得有一种以上的方法来做到这一点。

首先,你必须创建一个临时windows account。为什么?要允许访问该指定的目录中只有一个用户,并移除访问到其他帐户。您可以通过使用在System.Security.AccessControl命名空间提供DirectorySecurity类做到这一点。

还有连接到它的例子。

PS:类似的帖子,请msdn


0
投票

锁定磁盘上的文件是什么,是很难做到/得到正确的。您不妨考虑一种替代方法是改用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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.