我尝试从远程网络路径上的文件读取文件内容。我收到错误(它正在被另一个进程使用)我该如何克服这个问题?

问题描述 投票:0回答:0

我知道这个问题有一些很好的答案,但就我而言,我认为有一些特别的东西:

在我的 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));
            }

        }

    }
c# file-access network-connection file.readalllines
© www.soinside.com 2019 - 2024. All rights reserved.