ファイル共有へのコピーが機能しないときにファイルをアップロードするための関数をC#で作成しました。私はアップロードされたファイルが元のサイズの約1.5〜2倍であり、無効なファイルであることに気づいています。ここでは、コードは次のようになります。ftpのアップロードが大きすぎます
public bool save_FTPUpload(FileInfo fi_attachment)
{
bool fileSaved = false;
string filename = fi_attachment.Name;
while (!fileSaved)
{
string file_ftpURI = string.Format("{0}/{1}", ftpURI, filename);
FtpWebRequest file_exist_request = (FtpWebRequest)FtpWebRequest.Create(file_ftpURI);
file_exist_request.Credentials = new NetworkCredential(ftp_user, ftp_pass);
file_exist_request.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse response = (FtpWebResponse)file_exist_request.GetResponse();
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode ==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
FtpWebRequest upload_request = (FtpWebRequest)FtpWebRequest.Create(file_ftpURI);
upload_request.Credentials = new NetworkCredential(ftp_user, ftp_pass);
upload_request.Method = WebRequestMethods.Ftp.UploadFile;
upload_request.UsePassive = true;
upload_request.UseBinary = true;
upload_request.KeepAlive = false;
StreamReader attachment = new StreamReader(fi_attachment.FullName);
byte[] attachmentData = Encoding.UTF8.GetBytes(attachment.ReadToEnd());
upload_request.ContentLength = attachmentData.Length;
//Stream upload_request_stream = upload_request.GetRequestStream();
using (Stream upload_request_stream = upload_request.GetRequestStream())
{
upload_request_stream.Write(attachmentData, 0, attachmentData.Length);
upload_request_stream.Close();
}
FtpWebResponse upload_response = (FtpWebResponse)upload_request.GetResponse();
fileSaved = true;
}
}
}
return fileSaved;
}
このアウトを把握内の任意のヘルプは素晴らしいことです。
(私の頭の上から)で
を置き換えることができます。どうして?どのようなエラーを処理していますか、それをどのように処理しようとしていますか?ファイルをアップロードしていますか? – David
@David - キャッチブロックは、有効なFTP接続を確認することです。どこかを選んだ(おそらくここにいる) –
それは間違いなくあなたが修正したいものです。私はあなたが報告している問題の根本的な原因を発見していませんが、ロジックフローに 'try/catch'を使用することは良い考えではありません。 – David