我可以在使用System.IO.File.WriteAllText()方法创建/修改文件时读取文件吗?

时间:2017-11-16 18:14:35

标签: c# asp.net .net biztalk streamwriter

我需要创建一个创建/修改文件夹中某些文本文件的进程。我使用下面的代码来做到这一点:

file = new System.IO.FileInfo(filePath);
file.Directory.Create(); 
System.IO.File.WriteAllText(file.FullName, "Some text...");

我有一个Biztalk队列,每隔2分钟查看文件夹中的文本文件,然后选择要处理的文件。我想在创建/修改时锁定文件,以便Biztalk不会尝试处理这些文件。我怎样才能做到这一点?

我在Windows中读到了关于Transactional NTFS的内容,这将让我创建事务上下文,但Windows文档说这个功能将被弃用,建议不要使用它。

3 个答案:

答案 0 :(得分:2)

要获取独占锁,您可以使用文件流来执行此操作

        using (FileStream fs = new FileStream("Test.txt", FileMode.Append, FileAccess.Write, FileShare.None))
        {
            using (StreamWriter sw = new StreamWriter(fs))
            {
                sw.WriteLine("test");
            }
        }

这样您就可以专门为当前文件流锁定文件。操作系统将拒绝来自同一应用程序中的另一个线程的任何其他应用程序或甚至来自另一个线程的新文件流实例读取或写入该文件。

答案 1 :(得分:2)

如果文件位于CIFS共享的本地NTFS卷上,则文件适配器将不会尝试读取打开的文件。然而,

更好的模式是在临时文件夹中处理文件,然后仅在完成后将完成的文件复制到BizTalk文件夹。这样,您根本不必担心锁定。

答案 2 :(得分:0)

在大多数情况下,使用不同的扩展名编写文件然后重命名文件可以正常工作。