我可以在使用 System.IO.File.WriteAllText() 方法 create/modify 时读取锁定文件吗?
Can I ReadLock a file while I create/modify it using System.IO.File.WriteAllText() method?
我需要创建一个进程,creates/modifies 文件夹中的一些文本文件。我正在使用下面的代码来做到这一点:
file = new System.IO.FileInfo(filePath);
file.Directory.Create();
System.IO.File.WriteAllText(file.FullName, "Some text...");
我有一个 Biztalk 队列,它每 2 分钟检查一次文件夹中的文本文件,然后选取这些文件进行处理。我想在 creating/modifying 时锁定文件,这样 Biztalk 就不会尝试处理这些文件。我怎样才能做到这一点?
我在 windows 中阅读了事务性 NTFS,它可以让我创建事务上下文,但 windows 文档说此功能将被弃用,建议不要使用它。
要获取独占锁,您可以使用文件流来实现
using (FileStream fs = new FileStream("Test.txt", FileMode.Append, FileAccess.Write, FileShare.None))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("test");
}
}
这样您就可以专门为当前文件流锁定文件。任何其他应用程序或什至来自同一应用程序中另一个线程的文件流的新实例尝试读取或写入文件都将被操作系统拒绝。
如果文件位于 CIFS 共享的本地 NTFS 卷上,文件适配器将不会尝试读取打开的文件。然而,
更好的模式是在临时文件夹中处理文件,然后仅在完成后将完成的文件复制到 BizTalk 文件夹。那样的话,你根本不用担心锁定。
在大多数情况下,用不同的扩展名写入文件然后重命名文件就可以了。
我需要创建一个进程,creates/modifies 文件夹中的一些文本文件。我正在使用下面的代码来做到这一点:
file = new System.IO.FileInfo(filePath);
file.Directory.Create();
System.IO.File.WriteAllText(file.FullName, "Some text...");
我有一个 Biztalk 队列,它每 2 分钟检查一次文件夹中的文本文件,然后选取这些文件进行处理。我想在 creating/modifying 时锁定文件,这样 Biztalk 就不会尝试处理这些文件。我怎样才能做到这一点?
我在 windows 中阅读了事务性 NTFS,它可以让我创建事务上下文,但 windows 文档说此功能将被弃用,建议不要使用它。
要获取独占锁,您可以使用文件流来实现
using (FileStream fs = new FileStream("Test.txt", FileMode.Append, FileAccess.Write, FileShare.None))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("test");
}
}
这样您就可以专门为当前文件流锁定文件。任何其他应用程序或什至来自同一应用程序中另一个线程的文件流的新实例尝试读取或写入文件都将被操作系统拒绝。
如果文件位于 CIFS 共享的本地 NTFS 卷上,文件适配器将不会尝试读取打开的文件。然而,
更好的模式是在临时文件夹中处理文件,然后仅在完成后将完成的文件复制到 BizTalk 文件夹。那样的话,你根本不用担心锁定。
在大多数情况下,用不同的扩展名写入文件然后重命名文件就可以了。