吵吵   2018-01-20  阅读:2,094

在使用罗氏的前处理以前,碰到K离子高的就要跑去找血看看是不是溶血,遇到项目没有做出来的,就要去一堆标本里面翻看看标本是不是凝了。

前处理带摄像头可以对标本进行拍照,把拍的照片传到LIS系统中,审核的时候就可以直接看到标本的状态了。

这个功能用的非常爽,也是一大进步,不爽的就是罗氏这图片取得有问题,经常丢失。

前处理拍完的照片是存储在前处理电脑上面的,提供了FTP的接口可以进行访问并下载照片,下载后的照片的文件名格式是 条码+_01.jpg。

其中01代表第一次扫描到标本,02是第二次,以此类推。

因为LIS的接口多是与罗氏的Infinity服务器进行通讯,因此罗氏上海的工程师就做了一个程序,把图片从前处理的电脑通过FTP下载到Infinity服务器上来,LIS接口直接从Infinity服务器上通过共享来取图片。

按说这也没啥问题,有问题的是这哥们写代码是兼职的。

写的FTP同步程序做成了一个服务,FILESYNC,结果用了一段时间我们发现,这个服务每天凌晨0点准时断掉。

为了解决这个问题,他有想了一个办法,用一个bat的批处理来监控同步的进程。

还是不行,因为可能进程和服务都在,就是不同步文件,于是又写了一个Bat,然后添加到计划任务,每五分钟重启一下这个程序…

等你都能做到这样子,为啥不把它做到程序里面…

和他们的工程师讨论了半天,我猜是因为他访问FTP服务器,只登陆了一次,然后一直维持连接,网络稍微出错,可能就断了,而他又没有处理断开的问题。

算了,不说了,还不如自己动手,用c#一个小时就搞定了:

FTP访问采用自带的FtpWebRequest类

获取列表的代码:

///

/// 获取当前目录下文件列表(仅文件)
///

///
public List GetFileList(out string erro)
{
List listFiles = new List();
erro = “”;
try
{
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
reqFTP.KeepAlive = false;
reqFTP.Timeout = 30 * 1000;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
using (FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse())
{

using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default))
{

string line = reader.ReadLine();
while (line != null)
{

if (line != null)
{
listFiles.Add(line);
}
line = reader.ReadLine();

}

reader.Close();

}
response.Close();
}

}
catch (Exception ex)
{

erro = “GetFileList Error –> ” + ex.Message.ToString();

}
return listFiles;
}

注意:FTP没有文件是会返回错误 The remote server returned an error: (550) File unavailable (e.g., file not found, no access)。属于正常。

然后建立一个线程,不断去轮询就好了。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

2条回应:“罗氏前处理图片同步程序FTPSync”

  1. 感谢楼主的分享,赞赞。

  2. haoessays说道:

    收藏了,赞赞。

发表评论

电子邮件地址不会被公开。 必填项已用*标注