我知道类似的问题已经问过很多次了,但是没有任何一项与我的要求相符。如果匹配,请随时将我引向正确的答案。
我有一个用c#,.net framework 4.6开发的Windows服务。
Windows服务每隔1个小时就会从其他服务接收一次任务(此问题无关紧要)。它实际上处理接收到的任务。执行每个任务大约需要10-15分钟才能完成。
在执行任务期间,它将在服务器的一个文件夹中生成多个文件。
在App.config中,我保存了folderpath。举例来说,我的appsetting的值为“ C:\ Test”。
每个任务都有一个taskid,例如说Task1。因此,我们创建了一个文件夹,例如“ C:\ Test \ Task1”。所有文件都在这里生成。并且一旦执行完成,该文件夹就被删除。
现在,我的要求是从接收任务到完成执行为止,我必须锁定生成这些文件的文件夹。
完成执行后,我需要立即解锁该文件夹。通过锁定,我的意思是,没有人应该能够打开该文件夹。
我知道文件可以被锁定。但是如何在这里锁定文件夹。任何人都可以在这里帮助我或为我提供正确的文章。 会很有帮助的。非常感谢!
答案 0 :(得分:0)
这是可能的,我认为有多种方法可以做到这一点。
首先,您必须创建一个临时if (coord->isValid()) {
m_path.append(QVariant::fromValue(coord));
}
。为什么?仅允许一个用户访问此指定目录,并删除对其他帐户的访问。您可以使用 System.Security.AccessControl 名称空间中提供的DirectorySecurity类来完成此操作。
上面还附有一个示例。
PS:msdn上有类似的帖子
答案 1 :(得分: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;
}
}
}