我的应用程序的目的是,它必须将文件上传到FTP服务器,然后将本地文件移动到Archive文件夹。这是我的代码:
public void UploadLocalFiles(string folderName)
{
try
{
string localPath = @"\\Mobileconnect\filedrop_to_ssis\" + folderName;
string[] files = Directory.GetFiles(localPath);
foreach (string filepath in files)
{
string fileName = Path.GetFileName(filepath);
localFileNames = files;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp:...../inbox/" + fileName));
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UsePassive = true;
reqFTP.UseBinary = true;
reqFTP.ServicePoint.ConnectionLimit = files.Length;
reqFTP.Credentials = new NetworkCredential("username", "password");
reqFTP.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = Certificate;
FileInfo fileInfo = new FileInfo(localPath + @"\" + fileName);
byte[] fileContents = new byte[fileInfo.Length];
FileStream fileStream = fileInfo.OpenRead();
fileStream.Read(fileContents, 0, Convert.ToInt32(fileInfo.Length));
Stream writer = reqFTP.GetRequestStream();
writer.Write(fileContents, 0, fileContents.Length);
}
reqFTP.Abort();
}
catch (Exception e)
{
Console.WriteLine("Error in GetLocalFileList method!!!!!" + e.Message);
}
}
运行此方法后,我无法移动文件,我收到此异常消息:“无法访问文件,该文件正由另一个进程使用”。我的文件流或流锁定了我的文件。当我通过using
围绕文件流和流时,它不会将文件上传到FTP,因为它不会using
。我不明白为什么,任何人都可以帮忙吗?
答案 0 :(得分:2)
问题在于文件流,您正在使用它来读取文件。
你需要关闭它。
只需在foreach循环结束之前添加fileStream.Close()
。
答案 1 :(得分:1)
完成后尝试使用FileStream.Dispose。这应该与'使用'具有相同的效果。