将文件上载到FTP服务器

时间:2012-09-26 07:00:01

标签: c# c#-4.0 ftp c#-3.0 ftpwebrequest

我的应用程序的目的是,它必须将文件上传到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。我不明白为什么,任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

问题在于文件流,您正在使用它来读取文件。

你需要关闭它。

只需在foreach循环结束之前添加fileStream.Close()

答案 1 :(得分:1)

完成后尝试使用FileStream.Dispose。这应该与'使用'具有相同的效果。