-1

Stream を MemoryStream に変換できません。FTPサーバーにアップロードしたファイルを削除したいので、これを行いたいです。ファイルを削除または別のフォルダーに移動しようとすると、ファイルが別のプロセスによって使用されていることを示す例外が発生します。このアプリの目的は、ファイルを FTP サーバーにアップロードし、ファイルをアーカイブ フォルダーに移動することです。これは私のコードです:

public void UploadLocalFiles(string folderName)
        {
            try
            {

                string localPath = @"\\Mobileconnect\filedrop_to_ssis\" + folderName;
                string[] files = Directory.GetFiles(localPath);
                string path;

                foreach (string filepath in files)
                {
                    string fileName = Path.GetFileName(filepath);
                    localFileNames = files;
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp:......./inbox/" + fileName));
                    reqFTP.UsePassive = true;
                    reqFTP.UseBinary = true;
                    reqFTP.ServicePoint.ConnectionLimit = files.Length;
                    reqFTP.Credentials = new NetworkCredential("username", "password");
                    reqFTP.EnableSsl = true;
                    ServicePointManager.ServerCertificateValidationCallback = Certificate;
                    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

                    FileInfo fileInfo = new FileInfo(localPath + @"\" + fileName);
                    FileStream fileStream = fileInfo.OpenRead();

                    int bufferLength = 2048;
                    byte[] buffer = new byte[bufferLength];

                    Stream uploadStream = reqFTP.GetRequestStream();

                    int contentLength = fileStream.Read(buffer, 0, bufferLength);
                    var memoStream = new MemoryStream();
                    uploadStream.CopyTo(memoStream);
                    memoStream.ToArray();
                    uploadStream.Close();

                    while (contentLength != 0)
                    {
                        memoStream.Write(buffer, 0, bufferLength);
                        contentLength = fileStream.Read(buffer, 0, bufferLength);

                    }
                }

                reqFTP.Abort();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in GetLocalFileList method!!!!!" + e.Message);
            }

        }

このコード行に到達すると:

 uploadStream.CopyTo(memoStream);

このストリームが読み取れないという例外が発生します。

どうすればこれを解決できますか?

4

1 に答える 1

1

uploadStream.CopyTo(memoStream);書き込み専用のFTP要求ストリームをコピーしようとしているため、失敗します。あなたのコードが何をしているのか(一箇所で多くのコピー/読み取り操作を行う方法)がわからないので、それを修正する方法をお勧めすることはできません。

また、あなたFileStreamはファイルをロックしています。コードにusing構成がないCloseDispose、少なくともfileStreamオブジェクトを呼び出しています。

補足:使用することは、手動で/ストリームごとusingに書くよりもはるかに簡単です(内部を閉じるための呼び出しを行わないため、例外の場合にコードがストリームを閉じないことに注意してください)。tryfinallyfinally

于 2012-09-25T08:05:34.373 に答える