Điều này hơi phức tạp.Mã trạng thái từ phương thức FTPWebRequest.GetResponse()
Tôi đang tải tệp lên FTP một cách không đồng bộ. Sau khi tải lên từng tệp, tôi đang kiểm tra trạng thái của thao tác tải lên cho tệp đó. Điều này có thể được thực hiện với thuộc tính StatusCode của đối tượng FtpWebResponse cho yêu cầu đó. Đoạn mã được đưa ra dưới đây.
FileStream fs = File.Open(fileName, FileMode.Open);
while ((iWork = fs.Read(buf, 0, buf.Length)) > 0)
requestStream.Write(buf, 0, iWork);
requestStream.Close();
FtpWebResponse wrRet = ((FtpWebResponse)state.Request.GetResponse());
Có khoảng 37 giá trị StatusCode theo msdn. Tôi không biết rằng các giá trị mã trạng thái nào sẽ đảm bảo rằng tệp được tải lên thành công. Một số người trong số họ tôi đã sử dụng trong mã của mình để kiểm tra thành công là:
wrRet.StatusCode == FtpStatusCode.CommandOK
wrRet.StatusCode == FtpStatusCode.ClosingData
wrRet.StatusCode == FtpStatusCode.ClosingControl
wrRet.StatusCode == FtpStatusCode.ConnectionClosed
wrRet.StatusCode == FtpStatusCode.FileActionOK
wrRet.StatusCode == FtpStatusCode.FileStatus
Nhưng tôi không biết phần còn lại. Tôi cần phải chắc chắn về các mã này bởi vì dựa trên sự thất bại hoặc thành công của hoạt động tải lên, tôi có các hoạt động phụ thuộc khác được thực hiện. Một điều kiện sai có thể ảnh hưởng đến mã còn lại. Một ý nghĩ khác mà tôi nghĩ là chỉ cần đặt mã ở trên vào một lần thử..kết hợp và không phụ thuộc vào các mã trạng thái này. Với điều này tôi sẽ không phụ thuộc vào mã trạng thái và giả định rằng bất kỳ lỗi nào sẽ luôn được chuyển đến khối catch. Vui lòng cho tôi biết nếu đây là cách phù hợp.
Tôi gặp sự cố với máy chủ FTP. Tôi sẽ đi với một giải pháp thực dụng và chỉ cần kiểm tra xem các tập tin chỉ cần tải lên máy chủ có thể được tìm thấy một lần nữa sau khi tải lên. Tôi biết nó không trả lời câu hỏi - nhưng tôi chỉ đi đến kết luận rằng tôi không thể tin tưởng các máy chủ FTP phản ứng – MacGyver