首页 新闻 会员 周边

C# 读取文件时报错(mscorlib)The process cannot access the file because another process has locked a portion of the file.

0
悬赏园豆:30 [待解决问题]

TextReader 读取csv文件时不时的报错?

1. csv 文件存在linux 系统的共享盘中

2. linux会每隔5五分钟在共享文件夹生成一个最新的csv文件

3. 我会每隔5s 去读取一下csv文件

求指教,为什么会出现这个错误?

1.怀疑是正在生成文件时,恰巧我去读文件了,可是一直没有办法证明,也没有办法避免这种case,等高人指教下!

 

(mscorlib)The process cannot access the file because another process has locked a portion of the file.

 

  try             

{                 

 for (int k = 0; k < LastFile.Length; k++)      

           {                    

       if (LastFile[k] != "" && LastFile[k] != null)   

                  {                         trFixed = File.OpenText(PowerLogPath + "\\" + LastFile[k]);                         System.IO.TextReader.Synchronized(trFixed);                         szReadFile = trFixed.ReadToEnd().Trim(); // Read whole file content                                                  if (szReadFile.Length > 0)        

                 {                             szReadLine = szReadFile.Split('\n'); // Split each line                             nCount = szReadLine.GetLength(0); // Get line count                         }    

                     else                         {                             // Include Exception handler in case of Empty file                             AcceLog.PrintUserLog(AcceLogKind.Error, "Log  file corrupted!");                             return false;                         }                                                }                                

    }                                    

 }             

}             

catch (Exception e)          

   {                

 Thread.Sleep(100);               AcceLog.PrintUserLog(AcceLogKind.Error, "Error Happened during GET power value of EGX300" + "(" + e.Source + ")" + e.Message);// err happened line              }       

   finally           

  {                 

if (trFixed != null)          

     {                  

   trFixed.Close();        

         }        

     }

万事如意-的主页 万事如意- | 初学一级 | 园豆:93
提问于:2018-03-14 18:46
< >
分享
所有回答(2)
0

你可以试下把读取的语句放到try 里,然后catch里让thread.sleep几秒,再去读看看

新的开始 | 园豆:679 (小虾三级) | 2018-03-14 22:05

读取是在try里面,但是catch sleep 几秒是什么意思?

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-03-14 22:25

@万事如意-: 就是让线程等待几秒再读取,你用的什么语言?

支持(0) 反对(0) 新的开始 | 园豆:679 (小虾三级) | 2018-03-15 18:03

@新的开始: 我是循环读取的,每5秒读一次的,不存在你说的问题

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-03-16 14:01

@万事如意-:

1.那些CSV文件在你读取之后是不是就放在原文件夹不移动不删除?

2.程序每5秒读一次,是直接找到并读取的那个新生成的文件,还是把文件夹下的所有文件都遍历一遍?

3.你有没有试过在文件生成后过几分钟再手动读取那个CSV?是不是还报这个错?

我猜这个文件被其他程序占用的错误的原因,有两种可能:被生成CSV的程序占用了,或者被这个读取的程序定时启动的另一个线程给占用了

支持(0) 反对(0) 新的开始 | 园豆:679 (小虾三级) | 2018-03-17 15:12

@新的开始:hi

1. 读取后就放在原文件夹,不移动不删除

2.遍历文件夹找出最新文件再读取

3. 没有试过

CSV 文件是另一个智能模块5min钟生成一个的 ,没有那么巧吧,我读这个文件时,这个文件正被生成

ps : 这个报错也不是一直报,1个小时报一次

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-03-18 13:50
0

 异常信息不是提示的很清楚吗,有另一个程序操作,有一个方法就是你将文件复制到另一个地方(自定义),然后操作就可以了

jqw2009 | 园豆:2439 (老鸟四级) | 2018-03-15 16:22

这是1种解决思路,不过我还是想找到问题点

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-03-16 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册