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();
}
}
你可以试下把读取的语句放到try 里,然后catch里让thread.sleep几秒,再去读看看
读取是在try里面,但是catch sleep 几秒是什么意思?
@万事如意-: 就是让线程等待几秒再读取,你用的什么语言?
@新的开始: 我是循环读取的,每5秒读一次的,不存在你说的问题
@万事如意-:
1.那些CSV文件在你读取之后是不是就放在原文件夹不移动不删除?
2.程序每5秒读一次,是直接找到并读取的那个新生成的文件,还是把文件夹下的所有文件都遍历一遍?
3.你有没有试过在文件生成后过几分钟再手动读取那个CSV?是不是还报这个错?
我猜这个文件被其他程序占用的错误的原因,有两种可能:被生成CSV的程序占用了,或者被这个读取的程序定时启动的另一个线程给占用了
@新的开始:hi
1. 读取后就放在原文件夹,不移动不删除
2.遍历文件夹找出最新文件再读取
3. 没有试过
CSV 文件是另一个智能模块5min钟生成一个的 ,没有那么巧吧,我读这个文件时,这个文件正被生成
ps : 这个报错也不是一直报,1个小时报一次
异常信息不是提示的很清楚吗,有另一个程序操作,有一个方法就是你将文件复制到另一个地方(自定义),然后操作就可以了
这是1种解决思路,不过我还是想找到问题点