簡體   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