Пример #1
0
        private void EndGetStreamCallback(IAsyncResult ar)
        {
            //用户定义对象,其中包含该操作的相关信息,在这里得到FtpWebRequest
            FtpWebRequest uploadRequest = (FtpWebRequest)ar.AsyncState;

            //结束由BeginGetRequestStream启动的挂起的异步操作
            //必须调用EndGetRequestStream方法来完成异步操作
            //通常EndGetRequestStream由callback所引用的方法调用
            Stream requestStream = uploadRequest.EndGetRequestStream(ar);

            FileStream fileStream = File.Open(@"D:\app\result.txt", FileMode.Open);

            byte[] buffer = new byte[1024];
            int    bytesRead;

            while (true)
            {
                bytesRead = fileStream.Read(buffer, 0, buffer.Length);
                if (bytesRead == 0)
                {
                    break;
                }

                //本地的文件流数据写到请求流
                requestStream.Write(buffer, 0, bytesRead);
            }

            requestStream.Close();
            fileStream.Close();

            //开始以异步方式向FTP服务器发送请求并从FTP服务器接收响应
            uploadRequest.BeginGetResponse(new AsyncCallback(EndGetResponseCallback), uploadRequest);
        }
Пример #2
0
        public void TransFile(IAsyncResult ar)
        {
            FileInfo file = ar.AsyncState as FileInfo;

            try
            {
                _requestStream = _uploadRequest.EndGetRequestStream(ar);
                _fileStream    = File.OpenRead(file.FullName);
                byte[] buffer = new byte[1024];
                int    bytesRead;
                if (_currLength < file.Length)
                {
                    //设置Position
                    _fileStream.Seek(_currLength, SeekOrigin.Begin);
                    while (true)
                    {
                        if (_abort)
                        {
                            _uploadRequest.Abort();
                            break;
                        }
                        bytesRead = _fileStream.Read(buffer, 0, buffer.Length);
                        if (bytesRead == 0)
                        {
                            break;
                        }
                        _requestStream.Write(buffer, 0, bytesRead);
                        _currLength += bytesRead;
                    }
                }
                RomoveFile(file);

                //添加到已完成列表中
                if (!_abort)
                {
                    _uploadedFiles.Add(file);
                }

                if (!_abort)
                {
                    _uploadRequest.BeginGetResponse(new AsyncCallback(UploadNextFile), null);
                }
                else
                {
                    UploadFile(null);
                }
            }
            catch (Exception e)
            {
                _result = e.Message;
                RomoveFile(file);
                UploadFile(null);
            }
        }
Пример #3
0
 private void EndGetStreamCallback(IAsyncResult ar)
 {
     Stream requestStream = null;
     // End the asynchronous call to get the request stream.
     try
     {
         requestStream = request.EndGetRequestStream(ar);
     } 
     // Return exceptions to the main application thread.
     catch (Exception e)
     {
         Console.WriteLine("Could not get the request stream.");
         asyncException = e;
         wait.Set();
         return;
     }
     // Write the file contents to the request stream.
     requestStream.Write(fileContents, 0, fileContents.Length);
     Console.WriteLine ("Writing {0} bytes to the stream.", fileContents.Length);
     // IMPORTANT: Close the request stream before sending the request.
     requestStream.Close();
 }
Пример #4
0
        private static MemoryStream DoOldStyleAsync(FtpWebRequest request, MemoryStream requestBody)
        {
            if (requestBody != null)
            {
                IAsyncResult ar = request.BeginGetRequestStream(null, null);
                ar.AsyncWaitHandle.WaitOne();
                Stream requestStream = request.EndGetRequestStream(ar);
                requestBody.CopyTo(requestStream);
                requestStream.Close();
            }

            IAsyncResult ar2 = request.BeginGetResponse(null, null);

            ar2.AsyncWaitHandle.WaitOne();
            FtpWebResponse response = (FtpWebResponse)request.EndGetResponse(ar2);

            MemoryStream responseBody = new MemoryStream();

            response.GetResponseStream().CopyTo(responseBody);
            response.Close();

            return(responseBody);
        }
Пример #5
0
        private static MemoryStream DoOldStyleAsync(FtpWebRequest request, MemoryStream requestBody)
        {
            if (requestBody != null)
            {
                IAsyncResult ar = request.BeginGetRequestStream(null, null);
                ar.AsyncWaitHandle.WaitOne();
                Stream requestStream = request.EndGetRequestStream(ar);
                requestBody.CopyTo(requestStream);
                requestStream.Close();
            }

            IAsyncResult ar2 = request.BeginGetResponse(null, null);
            ar2.AsyncWaitHandle.WaitOne();
            FtpWebResponse response = (FtpWebResponse)request.EndGetResponse(ar2);

            MemoryStream responseBody = new MemoryStream();
            response.GetResponseStream().CopyTo(responseBody);
            response.Close();

            return responseBody;
        }