FTP サーバーにファイルをロードしようとしています。これが私のコードです:
// Create the request.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(appSettingsFTP.ftpUrl + @"/" + filename);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Timeout = 6000000; //set to 100 minutes
// Add the login credentials.
request.Credentials = new NetworkCredential(appSettingsFTP.ftpLogin, appSettingsFTP.ftpPassword);
// Grab the file contents.
StreamReader sourceStream = new StreamReader(appSettingsFTP.uploadFileDirectory + filename);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
// Copy the file contents to the outgoing stream.
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
LoggerFTP.Log(filename.ToString() + " " + "Upload Complete, Status: " + response.StatusCode, false);
ファイルの 1 つ (8 つある) を除いて、すべて正常に動作しているようです。動作しないファイルは最大で、約 160,000 kB です。私が得ているエラーはこれです:
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.String.ToCharArray()
at System.Text.Encoding.GetBytes(String s)
at CPMainSpringAPIExportsSC.UploadFTP.FTPUploadMethod(String viewname, String filename)
コードの次の行でエラーが発生していると確信しています。
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
一度にすべてではなく、ループでスチームリーダーから読み取る方法はありますか? これで問題は解決すると思いますが、どうすればよいかわかりません。
また、+= 演算子を使用して何かを実行しようとしましたが、byte[] が静的であることに気付きました。
他のアイデアはありますか?助けてくれてありがとう。