我知道这个问题有一些很好的答案,但就我而言,我认为有一些特别的东西:
在我的 C# 项目(在服务器上运行)中,我想读取远程 CNC 机床 IPC 上的文件内容。我使用凭据打开一个新连接,并尝试使用 File.ReadAllLines 读取内容。我可以毫无问题地从该机器读取许多其他文件。但在这个文件上,我每次都会收到“该进程无法访问该文件......因为它正在被另一个进程使用”
一旦 CNC 机床上出现新的报警消息,远程 CNC 机床就会写入文件。所以写这篇文章的频率并不高。 (大约每小时 1-2 次)。我不知道数控机床如何写入文件(如果它在写入后关闭文件),我也没有机会更改和优化这个过程。
我也没有看到其他客户端尝试读取同一文件。 此外,在我自己的应用程序中,没有其他代码尝试访问该文件。
还有一个奇怪的地方:如果我从我的服务器映射一个网络驱动器并手动打开文件,它可以毫无问题地打开。我没有收到类似的错误消息,例如“...文件正在使用中”。
我的代码如下。我的目标是逐行读取文件内容。我该如何克服这个问题?
public void Read_Alarm_Log_File()
{
string networkPath = "\\\\" + TagService.IP_Win_List + "\\F$";
NetworkCredential credentials = new NetworkCredential("username", "XXXXX");
TagService.Alarm_log_File_content.Clear();
try
{
using (new NetworkConnection(networkPath , credentials))
{
var lines = File.ReadAllLines(networkPath + "\\mmc2\\proto.txt");
for (var i = 0; i < lines.Length; i += 1)
{
var line = lines[i] + "\n";
TagService.Alarm_log_File_content.Add(line);
}
}
}
catch (Exception ex)
{
using (StreamWriter sw = File.AppendText((CommonClass.error_path)))
{
sw.WriteLine("Alarm Log File could not be read: " + ex + " " + Convert.ToString(DateTime.Now));
}
}
}