[英]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.