Блокировка и разблокировка папки с помощью службы Windows, разработанной с использованием C # - PullRequest
0 голосов
/ 07 февраля 2019

Я знаю, что подобный вопрос задавался много раз, но ничего не соответствует моему требованию.Если это соответствует, пожалуйста, не стесняйтесь направить меня к правильному ответу.

У меня есть служба Windows, разработанная на C #, .net Framework 4.6.
Эта служба Windows получает задачу каждые 1 час от другой службы (что не имеет значения в этом вопросе). Она фактически обрабатываетзадача, которую он получает. Для выполнения каждой задачи требуется около 10-15 минут.Во время выполнения задачи он генерирует несколько файлов в одной папке на сервере.
В App.config у меня сохранен путь к папке.Например, у меня есть appsetting, значение которого равно «C: \ Test».
У каждой задачи есть идентификатор задачи, например, это Task1.Поэтому мы создаем папку типа «C: \ Test \ Task1».Все файлы генерируются здесь.И как только выполнение завершится, эта папка будет удалена.

Теперь мое требование заключается в том, чтобы с момента получения задания до завершения выполнения мне пришлось заблокировать папку, в которой генерируются эти файлы.
Мне нужно разблокировать папку, как тольковыполнение закрыто. Я имею в виду, что никто не сможет открыть эту папку.

Я знаю, что файлы могут быть заблокированы.Но как заблокировать папку здесь.Может ли кто-нибудь помочь мне здесь или направить мне нужную статью.
Это было бы очень полезно. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Блокировка файлов на диске - это то, что трудно сделать / получить правильно.Одна альтернатива, которую вы можете рассмотреть, - вместо этого использовать файлы с отображением в памяти , в частности непостоянные файлы с отображением в памяти :

непостоянные файлыявляются отображенными в память файлами, которые не связаны с файлом на диске.Когда последний процесс завершил работу с файлом, данные будут потеряны, и файл будет утилизирован сборщиком мусора.Эти файлы подходят для создания общей памяти для межпроцессного взаимодействия (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;
        }
    }
}
0 голосов
/ 07 февраля 2019

Это возможно, и я думаю, что есть несколько способов сделать это.

Сначала необходимо создать временный windows account.Зачем?Разрешить доступ к указанному каталогу только одному пользователю и удалить доступ к другим учетным записям.Это можно сделать с помощью класса DirectorySecurity , доступного в пространстве имен System.Security.AccessControl .

К нему также прикреплен пример.

PS: Аналогичное сообщение доступно по адресу msdn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...