【发布时间】:2018-03-02 21:18:26
【问题描述】:
我有一个 ASP.Net 4.5 Web 应用程序。单击按钮时,其中一个页面将文件写入文件系统。这个文件也被另一个进程访问,一个我无法控制的第三方程序。这个其他程序读取文件,然后将其移动到子文件夹。正因为如此,我正在使用 Append FileMode 创建一个 FileStream:如果文件不存在,它会创建文件,如果存在则附加到它。我想确保在我的应用程序中,当单击按钮时,该第三方应用程序没有访问该文件。我写了下面的代码(我抄袭了from here),但是当我测试它时,它没有检测到文件是打开的。当我说文件已打开时,我的意思是在测试期间我在记事本中打开了文件。如果这很重要,我正在使用 Visual Studio 2012 的 Windows 7 机器上完成这项工作。为什么看不到文件已打开?
bool TryOpen(string FileWithPath, out FileStream fs)
{
try
{
fs = File.Open(FileWithPath, FileMode.Append, FileAccess.Write, FileShare.None);
return true;
}
catch (Exception ex)
{
fs = null;
return false;
}
}
FileStream OpenASAP(string path, int maxTries)
{
FileStream fs = null;
bool lastResult = false;
int count = 0;
while ((lastResult = !TryOpen(path, out fs)) && count < maxTries)
{
Thread.Sleep(100);
count++;
}
if (!lastResult || count >= maxTries)
{
}
return fs;
}
protected void writeToClientFile(DataSet ClientGenl, DataSet ClientBus, DataSet ClientBill)
{
FileStream fileStream = null;
string fileName = "ClientTest.txt";
string pathName = ConfigurationSettings.AppSettings["EliteFilePath"].ToString();
try
{
using (new KLClassLibrary.Impersonator(proxyaccount, domain, password))
{
fileStream = OpenASAP(pathName + fileName, 3);
etc.....
}
【问题讨论】:
-
听起来是 FileSystemWatcher 的完美工作。你也写在这个文件里吗?那是问题吗?如果是这样,写入临时文件,完成后将重命名写入将被移动的文件
-
更多关于这 2 个应用的整体工作流程的信息可能会有所帮助!
标签: c# asp.net filestream