最近用 FileSystem 和 FtpWebRequest 做一个多台服务器的同步程序,在使用FtpWebRequest进行上传的时候,出现一些问题,当上传文件夹的时候,文件夹结构如下:
A/A1/F1;F2;F3;F4;(A2/F5;F6);F7
A/A2/……创建文件夹的时候是同步操作,上传文件的时候是异步操作,就造成当我开始上传最后一个文件F7之后,切换回目录A/的时候出错,提示“远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。”
程序死掉,然后我用 try{} catch{} 进行无限的重试,结果总能操作成功;觉得有点不可思议,因为我上传文件的时候是 FtpRequest.Create 的一个新的对象,应该不会影响到创建文件夹的操作,就好像是在两台
不同的电脑上一个在进行上传,一个在进行创建文件夹一样。于是我开始怀疑我创建的这个新对象和我之前创建的对象用的是同一个网络连接,然后我打开CUTEFTP进行验证,发现在上传文件的时候,跟本不允许进行文件夹
切换操作,于是我在 FtpRequest.Create 新对象之后,马上打印了一下 FtpRequest.ServicePoint.GetHashCode() 发现不管我 create 多少个对象,这个 hashCode 总是同一个值!这下搞清楚了,为什么在上传文件的过程中进行目录切换操作报错的问题了,这和我编程之前想的一点儿都不一致,我希望至少要创建两个连接,一个用来进行同步FTP操作,一个进行异步FTP操作,在这里我想问一下,怎么样才能在 FtpRequest.Create 一个新的 FtpRequest 对象的时候自动使用不同的 ServicePoint ??