for getting full data without error use binary reader for uploading like this //FtpWebReq.Credentials = new NetworkCredential(userId, Password); // FtpWebReq.Method = WebRequestMethods.Ftp.UploadFile; //FtpWebReq.KeepAlive = false; // FtpWebReq.UseBinary = true; //FtpWebReq.ContentLength = FINFO.Length; FileStream fsSource = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader binReader = new BinaryReader(fsSource); Stream strm=null; byte[] byteRead; binReader.BaseStream.Seek(0, SeekOrigin.Begin); long pos = 0, fLen = 0; int buffLength = 2048; int readSize = buffLength; fLen = FINFO.Length; try { strm = FtpWebReq.GetRequestStream(); while (binReader.BaseStream.Position < fLen) { pos = binReader.BaseStream.Position; if (fLen - pos < buffLength) readSize = (int)(fLen - pos); byteRead = binReader.ReadBytes(readSize); strm.Write(byteRead, 0, readSize); } binReader.Close(); strm.Close(); fsSource.Close(); }