1

以下は、ある場所からftpパスにtxtファイルをコピーするためのコードスニペットです。

WebRequest WRequest = WebRequest.Create(FtpPath + OriginalfileName);
WRequest.Method = WebRequestMethods.Ftp.UploadFile;
WRequest.Credentials = new NetworkCredential("myusername", "FtpPassword");
FileStream stream = File.OpenRead(OriginalFilePath);
byte[] buffer = new byte[stream.Length];
Stream RStream = WRequest.GetRequestStream();
RStream.Write(buffer, 0, buffer.Length);
RStream.Close();

ただし、ftp宛先にコピーされたファイルは常に空です。なんで?

4

5 に答える 5

4

ファイルの内容をバッファに入力していません。次のコード行で長さを設定しているだけです。

byte[] buffer = new byte[stream.Length];

また、他のどこにもファイルの内容を入力していないため、空のデータを FTP サーバーに送信しているだけです。バイトには特定の長さがある場合がありますが、それはすべて空のバイトです。

于 2012-12-26T18:42:15.887 に答える
2

簡単な解決策として、WebClientクラスを使用できます

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile(uriString,fileName);
于 2012-12-26T18:53:25.770 に答える
1

初期サイズを渡した私の場合を除いて、バイトを書き込むときに同じタイプのロジックを適用できます

public static void CopyStream(Stream input, Stream output)
{

    byte[] buffer = new byte[1024];

    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}
于 2012-12-26T18:49:36.867 に答える
0

これはうまくいくはずです:

WebRequest WRequest = WebRequest.Create(FtpPath + OriginalfileName);
WRequest.Method = WebRequestMethods.Ftp.UploadFile;
WRequest.Credentials = new NetworkCredential("myusername", "FtpPassword");
using (FileStream stream = File.OpenRead(OriginalFilePath)) {
  using (Stream RStream = WRequest.GetRequestStream()) {
    stream.CopyTo(RStream);
  }
}
于 2012-12-26T18:55:02.763 に答える