#region
"Download: File transfer FROM ftp server"
///
<summary>
///
Copy a file from FTP server to local
///
</summary>
///
<param name="sourceFilename">
Target filename, if required
</param>
///
<param name="localFilename">
Full path of the local file
</param>
///
<returns>
</returns>
///
<remarks>
Target can be blank (use same filename), or just a filename
///
(assumes current directory) or a full path and filename
</remarks>
public
bool
Download(
string
sourceFilename,
string
localFilename,
bool
PermitOverwrite) {
//
2. determine target file
FileInfo fi
=
new
FileInfo(localFilename);
return
this
.Download(sourceFilename, fi, PermitOverwrite); }
//
Version taking an FtpFileInfo
public
bool
Download(FtpFileInfo file,
string
localFilename,
bool
permitOverwrite) {
return
this
.Download(file.FullName, localFilename, permitOverwrite); }
//
Another version taking FtpFileInfo and FileInfo
public
bool
Download(FtpFileInfo file, FileInfo localFI,
bool
permitOverwrite) {
return
this
.Download(file.FullName, localFI, permitOverwrite); }
//
Version taking string/FileInfo
public
bool
Download(
string
sourceFilename, FileInfo targetFI,
bool
permitOverwrite) {
//
1. check target
if
(targetFI.Exists
&&
!
(permitOverwrite)) {
throw
(
new
ApplicationException(
"
Target file already exists
"
)); }
//
2. check source
string
target;
if
(sourceFilename.Trim()
==
""
) {
throw
(
new
ApplicationException(
"
File not specified
"
)); }
else
if
(sourceFilename.Contains(
"
/
"
)) {
//
treat as a full path
target
=
AdjustDir(sourceFilename); }
else
{
//
treat as filename only, use current directory
target
=
CurrentDirectory
+
sourceFilename; }
string
URI
=
Hostname
+
target;
//
3. perform copy
System.Net.FtpWebRequest ftp
=
GetRequest(URI);
//
Set request to download a file in binary mode
ftp.Method
=
System.Net.WebRequestMethods.Ftp.DownloadFile; ftp.UseBinary
=
true
;
//
open request and get response stream
using
(FtpWebResponse response
=
(FtpWebResponse)ftp.GetResponse()) {
using
(Stream responseStream
=
response.GetResponseStream()) {
//
loop to read & write to file
using
(FileStream fs
=
targetFI.OpenWrite()) {
try
{
byte
[] buffer
=
new
byte
[
2048
];
int
read
=
0
;
do
{ read
=
responseStream.Read(buffer,
0
, buffer.Length); fs.Write(buffer,
0
, read); }
while
(
!
(read
==
0
)); responseStream.Close(); fs.Flush(); fs.Close(); }
catch
(Exception) {
//
catch error and delete file only partially downloaded
fs.Close();
//
delete target file as it's incomplete
targetFI.Delete();
throw
; } } responseStream.Close(); } response.Close(); }
return
true
; }
#endregion
FTP下载
最新推荐文章于 2021-11-23 16:38:16 发布