しばらく前に、ある場所から別の場所にファイルをチャンクでコピーする方法について質問しました。CopyFileEx「パラメータが無効です」エラー
私は非常に役立つ次のコードを受け取りました。
static void chunkCopyFile(string source, string destination, int bytesPerChunk)
{
uint bytesRead = 0;
using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read)) {
using (BinaryReader br = new BinaryReader(fs)) {
using (FileStream fsDest = new FileStream(destination, FileMode.Create)) {
BinaryWriter bw = new BinaryWriter(fsDest);
byte[] buffer;
for (int i = 0; i < fs.Length; i += bytesPerChunk) {
buffer = br.ReadBytes(bytesPerChunk);
bw.Write(buffer);
bytesRead += Convert.ToUInt32(bytesPerChunk);
updateProgress(bytesRead);
}
}
}
}
}
ただし、代わりにFTPを使用するようにこのコードを変換する必要があります。FTPパスをファイルストリームに渡すだけのことは明らかですが、「サポートされていません」というエラーが表示されました。
私はすでにファイルの長さを取得することができましたが、ダウンロードをチャンクに分割する方法がわかりません。いつものようにどんな助けも大歓迎です!
これまでのコード(あまりありません)
static void chunkCopyFTPFile(string destination, int bytesPerChunk)
{
uint bytesRead = 0;
fWR = (FtpWebRequest)WebRequest.Create("ftp://" + FTP_SERVER_NAME + "/test.txt");
fWR.Method = WebRequestMethods.Ftp.DownloadFile;
fWR.UseBinary = true;
fWR.Credentials = new NetworkCredential(FTP_SERVER_USERNAME, FTP_SERVER_PASSWORD);
FtpWebResponse response = (FtpWebResponse)fWR.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sR = new StreamReader(responseStream);
sR.ReadToEnd();
sR.Close();
response.Close();
}
最終コード(動作中):
using (Stream responseStream = response.GetResponseStream()) {
using (BinaryReader bR = new BinaryReader(responseStream)) {
using (FileStream fsDest = new FileStream(destination, FileMode.Create)) {
BinaryWriter bw = new BinaryWriter(fsDest);
int readCount;
byte[] buffer = new byte[bytesPerChunk];
readCount = responseStream.Read(buffer, 0, bytesPerChunk);
bytesRead += Convert.ToUInt32(readCount);
updateProgress(bytesRead);
while (readCount > 0) {
bw.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, bytesPerChunk);
bytesRead += Convert.ToUInt32(readCount);
updateProgress(bytesRead);
}
}
}
}