将人民币的数字表示转化成大写表示,一个FTP客户端的C
分类:面向对象

将人民币的数字表示转化成大写表示(C#版)

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Net.Sockets;

   为什么要自己写控件页不用网上成熟的控件呢?

实在没有什么好讲的,就是一个方法,大家拿去用吧

namespace zhangyuk.net.csdn.blog.ftpclient
{
 ///
 /// FTP Client
 ///
 public class FTPClient
 {
  #region 构造函数
  ///
  /// 缺省构造函数
  ///
  public FTPClient()
  {
   strRemoteHost  = "";
   strRemotePath  = "";
   strRemoteUser  = "";
   strRemotePass  = "";
   strRemotePort  = 21;
   bConnected     = false;
  }

调用方式:

   理由
    1:网上成熟的控件封装性太强;
    2:功能太多,有些用不着;

using System;

  ///
  /// 构造函数
  ///
  ///
  ///
  ///
  ///
  ///
  public FTPClient( string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort )
  {
   strRemoteHost  = remoteHost;
   strRemotePath  = remotePath;
   strRemoteUser  = remoteUser;
   strRemotePass  = remotePass;
   strRemotePort  = remotePort;
   Connect();
  }
  #endregion

#region 测试获取远程网页

    3:不太适用自己实际应用 .

namespace Test.Com
{
///
/// 功能:字符串处理函数集
///
public class DealString
{
#region 私有成员
///
/// 输入字符串
///
private string inputString=null;
///
/// 输出字符串
///
private string outString=null;
///
/// 提示信息
///
private string noteMessage=null;
#endregion

  #region 登陆
  ///
  /// FTP服务器IP地址
  ///
  private string strRemoteHost;
  public string RemoteHost
  {
   get
   {
    return strRemoteHost;
   }
   set
   {
    strRemoteHost = value;
   }
  }
  ///
  /// FTP服务器端口
  ///
  private int strRemotePort;
  public int RemotePort
  {
   get
   {
    return strRemotePort;
   }
   set
   {
    strRemotePort = value;
   }
  }
  ///
  /// 当前服务器目录
  ///
  private string strRemotePath;
  public string RemotePath
  {
   get
   {
    return strRemotePath;
   }
   set
   {
    strRemotePath = value;
   }
  }
  ///
  /// 登录用户账号
  ///
  private string strRemoteUser;
  public string RemoteUser
  {
   set
   {
    strRemoteUser = value;
   }
  }
  ///
  /// 用户登录密码
  ///
  private string strRemotePass;
  public string RemotePass
  {
   set
   {
    strRemotePass = value;
   }
  }

GetPageCode gpc = new GetPageCode();

 

#region 公共属性
///
/// 输入字符串
///
public string InputString
{
get{return inputString;}
set{inputString=value;}
}
///
/// 输出字符串
///
public string OutString
{
get{return outString;}
set{outString=value;}
}
///
/// 提示信息
///
public string NoteMessage
{
get{return noteMessage;}
set{noteMessage=value;}
}
#endregion

  ///
  /// 是否登录
  ///
  private Boolean bConnected;
  public bool Connected
  {
   get
   {
    return bConnected;
   }
  }
  #endregion

gpc.Url="";

   在前两篇文章中,本人试着探索自定义控件的写法,当时写的不太好,功能也少,现在在两篇文章的基础上加以整理和改造,完成了下面的控件.

#region 构造函数
public DealString()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#endregion

  #region 链接
  ///
  /// 建立连接
  ///
  public void Connect()
  {
   socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
   IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
   // 链接
   try
   {
    socketControl.Connect(ep);
   }
   catch(Exception)
   {
    throw new IOException("Couldn't connect to remote server");
   }

gpc.ProxyState=1;//使用代理服务器,0为不使用,设置为1后下面的代理设置才起作用

 

#region 公共方法
public void ConvertToChineseNum()
{
string numList="零壹贰叁肆伍陆柒捌玖";
string rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万";
double number=0;
string tempOutString=null;

   // 获取应答码
   ReadReply();
   if(iReplyCode != 220)
   {
    DisConnect();
    throw new IOException(strReply.Substring(4));
   }

gpc.ProxyAddress="

   功能:
     1:支持url参数分页;
     2:运行回发事件分页;

try
{
number=double.Parse(this.inputString);
}
catch
{
this.noteMessage="传入参数非数字!";
return;
}

   // 登陆
   SendCommand("USER "+strRemoteUser);
   if( !(iReplyCode == 331 || iReplyCode == 230) )
   {
    CloseSocketConnect();//关闭连接
    throw new IOException(strReply.Substring(4));
   }
   if( iReplyCode != 230 )
   {
    SendCommand("PASS "+strRemotePass);
    if( !(iReplyCode == 230 || iReplyCode == 202) )
    {
     CloseSocketConnect();//关闭连接
     throw new IOException(strReply.Substring(4));
    }
   }
   bConnected = true;

gpc.ProxyPort="80";//代理服务器的端口

     3:可以自定义样式( 样式的名称是写死的,用户只能更改样式内容);

if(number>9999999999999.99)
this.noteMessage="超出范围的人民币值";

   // 切换到目录
   ChDir(strRemotePath);
  }    

gpc.ProxyAccount="proxy";//代理服务器账号

 

//将小数转化为整数字符串
string tempNumberString=Convert.ToInt64(number*100).ToString();
int tempNmberLength=tempNumberString.Length;
int i=0;
while(i {
int oneNumber=Int32.Parse(tempNumberString.Substring(i,1));
string oneNumberChar=numList.Substring(oneNumber,1);
string oneNumberUnit=rmbList.Substring(tempNmberLength-i-1,1);
if(oneNumberChar!="零")
tempOutString+=oneNumberChar+oneNumberUnit;
else
{
if(oneNumberUnit=="亿"||oneNumberUnit=="万"||oneNumberUnit=="元"||oneNumberUnit=="零")
{
while (tempOutString.EndsWith("零"))
{
tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
}

  ///
  /// 关闭连接
  ///
  public void DisConnect()
  {
   if( socketControl != null )
   {
    SendCommand("QUIT");
   }
   CloseSocketConnect();
  }

gpc.ProxyPassword="password";//代理服务器密码

     4:本控件图例图片 1

}
if(oneNumberUnit=="亿"||(oneNumberUnit=="万"&&!tempOutString.EndsWith("亿"))||oneNumberUnit=="元")
{
tempOutString+=oneNumberUnit;
}
else
{
bool tempEnd=tempOutString.EndsWith("亿");
bool zeroEnd=tempOutString.EndsWith("零");
if(tempOutString.Length>1)
{
bool zeroStart=tempOutString.Substring(tempOutString.Length-2,2).StartsWith("零");
if(!zeroEnd&&(zeroStart||!tempEnd))
tempOutString+=oneNumberChar;
}
else
{
if(!zeroEnd&&!tempEnd)
tempOutString+=oneNumberChar;
}
}
}
i+=1;
}

  #endregion

gpc.ProxyDomain="bqc";//代理服务器域

 

while (tempOutString.EndsWith("零"))
{
tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
}

  #region 传输模式

gpc.OutFilePath=filePath;//设置输出文件路径的地方,如果不设置,则返回字符串

       在页数多的时候,用户可以设置省略号前面和后面显示的数量,上图设置都是5;

while(tempOutString.EndsWith("元"))
{
tempOutString=tempOutString+"整";
}

  ///
  /// 传输模式:二进制类型、ASCII类型
  ///
  public enum TransferType {Binary,ASCII};

gpc.GetSource();//处理

 

this.outString=tempOutString;

  ///
  /// 设置传输模式
  ///
  /// 传输模式
  public void SetTransferType(TransferType ttType)
  {
   if(ttType == TransferType.Binary)
   {
    SendCommand("TYPE I");//binary类型传输
   }
   else
   {
    SendCommand("TYPE A");//ASCII类型传输
   }
   if (iReplyCode != 200)
   {
    throw new IOException(strReply.Substring(4));
   }
   else
   {
    trType = ttType;
   }
  }

string tempErr=gpc.NoteMessage;//如果出错,这里会提示

     5:可以设置跳转到文本框的显示与否.

}
#endregion
}
}

  ///
  /// 获得传输模式
  ///
  /// 传输模式
  public TransferType GetTransferType()
  {
   return trType;
  }
   
  #endregion

string tempCode=gpc.OutString;//返回的字符串

 

  #region 文件操作
  ///
  /// 获得文件列表
  ///
  /// 文件名的匹配字符串
  ///
  public string[] Dir(string strMask)
  {
   // 建立链接
   if(!bConnected)
   {
    Connect();
   }

#endregion

说明:本人参考了AspNetPager控制的源代码
    主要目的是:学习自定义控件的用法,可能结合自己的实际应用来写出适合自己的控件
    代码有点长,本人都写在一个文件中了,希望各位指点:

   //建立进行数据连接的socket
   Socket socketData = CreateDataSocket();
  
   //传送命令
   SendCommand("NLST " + strMask);

类代码:

    代码如下: 

   //分析应答代码
   if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
   {
    throw new IOException(strReply.Substring(4));
   }

using System;

 

   //获得结果
   strMsg = "";
   while(true)
   {
    int iBytes = socketData.Receive(buffer, buffer.Length, 0);
    strMsg += ASCII.GetString(buffer, 0, iBytes);
    if(iBytes < buffer.Length)
    {
     break;
    }
   }
   char[] seperator = {'n'};
   string[] strsFileList = strMsg.Split(seperator);
   socketData.Close();//数据socket关闭时也会有返回码
   if(iReplyCode != 226)
   {
    ReadReply();
    if(iReplyCode != 226)
    {
     throw new IOException(strReply.Substring(4));
    }
   }
   return strsFileList;
  }    

using System.Collections;

图片 2图片 3Code
图片 4using System;
图片 5using System.ComponentModel;
图片 6using System.Drawing;
图片 7using System.Security.Permissions;
图片 8using System.Web;
图片 9using System.Web.UI;
图片 10using System.Web.UI.WebControls;
图片 11using System.Text;
图片 12using System.IO;
图片 13using System.Collections;
图片 14using System.Collections.Generic;
图片 15using  System.Collections.Specialized;
图片 16[assembly: WebResource("pagerControls.Resources.listPager.css", "text/css", PerformSubstitution = true)]
图片 17namespace pagerControls
图片 18图片 19图片 20{
图片 21    [DefaultProperty("Text")]
图片 22    [ToolboxData("<{0}:WebCustomControlPager runat=server></{0}:WebCustomControlPager>")]
图片 23    
图片 24    [ParseChildren(true)]
图片 25    public class WebCustomControlPager : CompositeControl, INamingContainer, IPostBackEventHandler, IPostBackDataHandler
图片 26图片 27    图片 28{
图片 29图片 30        Properties#region Properties
图片 31        private int _currentPageIndex = 1;
图片 32图片 33        /**//// <summary>
图片 34        /// 当前页面索引
图片 35        /// </summary>
图片 36        [Bindable(true)]
图片 37        [Localizable(true)]
图片 38        [DescriptionAttribute("当前页面索引从1开始")]
图片 39        [DefaultValueAttribute("当前页面索引")]
图片 40        public int currentPageIndex
图片 41图片 42        图片 43{
图片 44            get
图片 45图片 46            图片 47{
图片 48
图片 49                return ((ViewState["currentPageIndex"] == null) ? this._currentPageIndex : (int)ViewState["currentPageIndex"]);
图片 50            }
图片 51
图片 52            set
图片 53图片 54            图片 55{
图片 56
图片 57                ViewState["currentPageIndex"] = value;
图片 58            }
图片 59        }
图片 60图片 61        /**//// <summary>
图片 62        /// 是否自定义样式
图片 63        /// </summary>
图片 64        [Bindable(true)]
图片 65        [Localizable(true)]
图片 66        [DescriptionAttribute("是否自定义样式")]
图片 67        [DefaultValueAttribute("0")]
图片 68        public bool  IsCustomStyle
图片 69图片 70        图片 71{
图片 72            get
图片 73图片 74            图片 75{
图片 76                return ((ViewState["IsCustomStyle"] == null) ? false : (bool)ViewState["IsCustomStyle"]);
图片 77            }
图片 78
图片 79            set
图片 80图片 81            图片 82{
图片 83
图片 84                ViewState["IsCustomStyle"] = value;
图片 85            }
图片 86        }
图片 87        private int _iRecordCount = 1;
图片 88图片 89        /**//// <summary>
图片 90        /// 记录数量
图片 91        /// </summary>
图片 92        [Bindable(true)]
图片 93        [Localizable(true)]
图片 94        [DescriptionAttribute("记录数量")]
图片 95        [DefaultValueAttribute("记录数量")]
图片 96        public int iRecordCount
图片 97图片 98        图片 99{
图片 100            set
图片 101图片 102            图片 103{
图片 104
图片 105                ViewState["iRecordCount"] = value;
图片 106                this._iRecordCount = value;
图片 107            }
图片 108            get
图片 109图片 110            图片 111{
图片 112                return ((ViewState["iRecordCount"] == null) ? this._iRecordCount : (int)ViewState["iRecordCount"]);
图片 113
图片 114            }
图片 115
图片 116
图片 117        }
图片 118        private int _iRowsCount = 10;
图片 119图片 120        /**//// <summary>
图片 121        /// 每页记录数量
图片 122        /// </summary>
图片 123        [Bindable(true)]
图片 124        [Localizable(true)]
图片 125        [DescriptionAttribute("每页记录数量")]
图片 126        [DefaultValueAttribute("每页记录数量")]
图片 127        public int iRowsCount
图片 128图片 129        图片 130{
图片 131            get
图片 132图片 133            图片 134{
图片 135                return ((ViewState["iRowsCount"] == null) ? this._iRowsCount : (int)ViewState["iRowsCount"]);
图片 136
图片 137            }
图片 138
图片 139            set
图片 140图片 141            图片 142{
图片 143                this._iRowsCount = value;
图片 144                ViewState["iRowsCount"] = value;
图片 145            }
图片 146        }
图片 147        private int _iPrevCount = 5;
图片 148图片 149        /**//// <summary>
图片 150        /// 前部分记录数量
图片 151        /// </summary>
图片 152        [Bindable(true)]
图片 153        [Localizable(true)]
图片 154        [DescriptionAttribute("前部分记录数量")]
图片 155        [DefaultValueAttribute("前部分记录数量")]
图片 156        public int iPrevCount
图片 157图片 158        图片 159{
图片 160            get
图片 161图片 162            图片 163{
图片 164                return ((ViewState["iPrevCount"] == null) ? this._iPrevCount : (int)ViewState["iPrevCount"]);
图片 165
图片 166            }
图片 167
图片 168            set
图片 169图片 170            图片 171{
图片 172                this._iPrevCount = value;
图片 173                ViewState["iPrevCount"] = value;
图片 174            }
图片 175        }
图片 176        private int _iNextCount = 5;
图片 177图片 178        /**//// <summary>
图片 179        /// 后部分记录数量
图片 180        /// </summary>
图片 181        [Bindable(true)]
图片 182        [Localizable(true)]
图片 183        [DescriptionAttribute("后部分记录数量")]
图片 184        [DefaultValueAttribute("后部分记录数量")]
图片 185        public int iNextCount
图片 186图片 187        图片 188{
图片 189            get
图片 190图片 191            图片 192{
图片 193                return ((ViewState["iNextCount"] == null) ? this._iNextCount : (int)ViewState["iNextCount"]);
图片 194
图片 195            }
图片 196
图片 197            set
图片 198图片 199            图片 200{
图片 201
图片 202                ViewState["iNextCount"] = value;
图片 203            }
图片 204        }
图片 205        private static readonly object EventSubmitKey = new object();
图片 206        [Bindable(true)]
图片 207        [Localizable(true)]
图片 208        [DescriptionAttribute("首页导航按钮文本")]
图片 209        [DefaultValueAttribute("首页")]
图片 210        public string goFirstText
图片 211图片 212        图片 213{
图片 214            get
图片 215图片 216            图片 217{
图片 218                return ((ViewState["goFirstText"] == null) ? "首页" : (string)ViewState["goFirstText"]);
图片 219            }
图片 220            set
图片 221图片 222            图片 223{
图片 224                ViewState["goFirstText"] = value;
图片 225            }
图片 226        }
图片 227        //页面总数
图片 228        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
图片 229        public int pageCount
图片 230图片 231        图片 232{
图片 233            get
图片 234图片 235            图片 236{
图片 237                if (this.iRecordCount == 0)
图片 238                    return 1;
图片 239                return (int)Math.Ceiling((double)this.iRecordCount / (double)this.iRowsCount);
图片 240            }
图片 241        }
图片 242        //如果小于此数字则不显示省略号
图片 243        private int intDefaultCount = 10;
图片 244图片 245        /**//// <summary>
图片 246        /// 上一页按钮文本
图片 247        /// </summary>
图片 248        [Browsable(true), Themeable(true), DefaultValue("<<上一页"), DescriptionAttribute("上一页按钮文本")]
图片 249        public string PrevPageText
图片 250图片 251        图片 252{
图片 253            get
图片 254图片 255            图片 256{
图片 257                return (ViewState["PrevPageText"] == null) ? "<<上一页" : (string)ViewState["PrevPageText"];
图片 258            }
图片 259图片 260            set 图片 261{ ViewState["PrevPageText"] = value; }
图片 262        }
图片 263图片 264        /**//// <summary>
图片 265        /// 下一页按钮文本
图片 266        /// </summary>
图片 267        [Browsable(true), Themeable(true), DefaultValue("下一页>>"), DescriptionAttribute("下一页按钮文本")]
图片 268        public string NextPageText
图片 269图片 270        图片 271{
图片 272            get
图片 273图片 274            图片 275{
图片 276
图片 277                return (ViewState["NextPageText"] == null) ? "下一页>>" : (string)ViewState["NextPageText"];
图片 278            }
图片 279图片 280            set 图片 281{ ViewState["NextPageText"] = value; }
图片 282        }
图片 283图片 284        /**//// <summary>
图片 285        /// 末页按钮文本
图片 286        /// </summary>
图片 287        [Browsable(true), Themeable(true), DefaultValue("末页"), DescriptionAttribute("末页按钮文本")]
图片 288        public string LastPageText
图片 289图片 290        图片 291{
图片 292            get
图片 293图片 294            图片 295{
图片 296
图片 297                return (ViewState["LastPageText"] == null) ? "末页" : (string)ViewState["LastPageText"];
图片 298            }
图片 299图片 300            set 图片 301{ ViewState["LastPageText"] = value; }
图片 302        }
图片 303图片 304        /**//// <summary>
图片 305        /// 是否显示文本框
图片 306        /// </summary>
图片 307        [Browsable(true), Themeable(true), DefaultValue(false), DescriptionAttribute("是否显示文本框")]
图片 308        public bool  IsInput
图片 309图片 310        图片 311{
图片 312            get
图片 313图片 314            图片 315{
图片 316
图片 317                return (ViewState["IsInput"] == null) ? false : (bool)ViewState["IsInput"];
图片 318            }
图片 319图片 320            set 图片 321{ ViewState["IsInput"] = value; }
图片 322        }
图片 323    
图片 324图片 325        /**//// <summary>
图片 326        /// 是否url分页
图片 327        /// </summary>
图片 328        [Browsable(true), Themeable(true), DefaultValue(false ), DescriptionAttribute("是否url分页")]
图片 329        public bool UrlPaging
图片 330图片 331        图片 332{
图片 333            get
图片 334图片 335            图片 336{
图片 337
图片 338                return (ViewState["UrlPaging"] == null) ? false : (bool)ViewState["UrlPaging"];
图片 339            }
图片 340图片 341            set 图片 342{ ViewState["UrlPaging"] = value; }
图片 343        }
图片 344        [Browsable(true), DefaultValue("page"), DescriptionAttribute("分页参数")]
图片 345        public string UrlPageIndexName
图片 346图片 347        图片 348{
图片 349            get
图片 350图片 351            图片 352{
图片 353                return (null == ViewState["UrlPageIndexName"]) ? "page" : (string)ViewState["UrlPageIndexName"];
图片 354            }
图片 355图片 356            set 图片 357{ ViewState["UrlPageIndexName"] = value; }
图片 358        }
图片 359图片 360        /**//// <summary>
图片 361        /// 是否显示首页
图片 362        /// </summary>
图片 363        [Bindable(true)]
图片 364        [Localizable(true)]
图片 365        [DescriptionAttribute("是否显示首页")]
图片 366        [DefaultValue(true )]
图片 367        public bool  IsDisplayFirstText
图片 368图片 369        图片 370{
图片 371            get
图片 372图片 373            图片 374{
图片 375                return ((ViewState["IsDisplayFirst"] == null) ? true  : (bool)ViewState["IsDisplayFirst"]);
图片 376
图片 377            }
图片 378
图片 379            set
图片 380图片 381            图片 382{
图片 383                ViewState["IsDisplayFirst"] = value;
图片 384            }
图片 385        }
图片 386图片 387        /**//// <summary>
图片 388        /// 是否显示末页
图片 389        /// </summary>
图片 390        [Bindable(true)]
图片 391        [Localizable(true)]
图片 392        [DescriptionAttribute("是否显示末页")]
图片 393        [DefaultValue(true )]
图片 394        public bool  IsDisplayLastText
图片 395图片 396        图片 397{
图片 398            get
图片 399图片 400            图片 401{
图片 402                return ((ViewState["IsDisplayLastText"] == null) ? true : (bool)ViewState["IsDisplayLastText"]);
图片 403
图片 404            }
图片 405
图片 406            set
图片 407图片 408            图片 409{
图片 410                ViewState["IsDisplayLastText"] = value;
图片 411            }
图片 412        }
图片 413        #endregion
图片 414
图片 415图片 416        Methods#region Methods
图片 417图片 418        /**//// <summary>
图片 419        /// 取得默认样式表信息
图片 420        /// by minjiang 08-3-24
图片 421        /// </summary>
图片 422        /// <returns></returns>
图片 423        private void  AddStyleFile(HtmlTextWriter output)
图片 424图片 425        图片 426{
图片 427            //如果是设计模式则返回 只有在有页面实体真正存在的情况才加载样式
图片 428            if (DesignMode)
图片 429图片 430            图片 431{ return; }
图片 432            //分页样式表信息         
图片 433图片 434            样式内容#region 样式内容
图片 435            //Get the name of the Web Resource.
图片 436            string  rsname = "pagerControls.Resources.listPager.css";           
图片 437            // Get a ClientScriptManager reference from the Page class.
图片 438            ClientScriptManager cs = Page.ClientScript;
图片 439            string sSre = cs.GetWebResourceUrl(this .GetType (), rsname);
图片 440            output.AddAttribute(HtmlTextWriterAttribute.Href, sSre );
图片 441            output.AddAttribute(HtmlTextWriterAttribute.Rel, "stylesheet");
图片 442            output.AddAttribute(HtmlTextWriterAttribute.Type , "text/css");           
图片 443            output.RenderBeginTag(HtmlTextWriterTag.Link);
图片 444            output.RenderEndTag();
图片 445            #endregion
图片 446
图片 447        }
图片 448图片 449        /**//// <summary>
图片 450        /// 链接索引数 从1开始
图片 451        /// 写链接样式
图片 452        /// </summary>
图片 453        /// <param name="kk">链接索引数 从1开始</param>
图片 454        /// <param name="output"></param>
图片 455        private void writeUrlCss(int kk, HtmlTextWriter output)
图片 456图片 457        图片 458{
图片 459            //链接样式
图片 460            string sCss = "";
图片 461            if (this.currentPageIndex == kk)
图片 462图片 463            图片 464{
图片 465                sCss = "select a5";
图片 466            }
图片 467            if (sCss != "")
图片 468图片 469            图片 470{
图片 471                output.AddAttribute(HtmlTextWriterAttribute.Class, sCss);
图片 472            
图片 473            }
图片 474            
图片 475
图片 476        }
图片 477图片 478        /**//// <summary>
图片 479        /// 取得分页信息
图片 480        /// by minjiang 08-3-11
图片 481        /// </summary>
图片 482        /// <param name="recordCount">记录总数</param>
图片 483        /// <param name="iRowsCount">每页记录大小</param>
图片 484        /// <param name="pageUrl">页面地址</param>
图片 485        /// <returns></returns>
图片 486        public string CSgetPagerHtml(int recordCount, int iRowsCount, HtmlTextWriter output)
图片 487图片 488        图片 489{
图片 490            if (pageCount <= 1)
图片 491图片 492            图片 493{
图片 494                return "";
图片 495
图片 496            }
图片 497            output.AddAttribute(HtmlTextWriterAttribute.Class , "page", false);
图片 498            output.RenderBeginTag(HtmlTextWriterTag.P );
图片 499            if (this.currentPageIndex < 1)
图片 500图片 501            图片 502{
图片 503                this.currentPageIndex = 1;
图片 504
图片 505
图片 506            }
图片 507            if (this.currentPageIndex > pageCount)
图片 508图片 509            图片 510{ this.currentPageIndex = 1; }
图片 511            //上一页索引
图片 512            int prevPage = 1;
图片 513            prevPage = this.currentPageIndex - 1;
图片 514            if (prevPage < 1)
图片 515图片 516            图片 517{ prevPage = 1; }
图片 518            //下一页索引
图片 519            int nextPage = 1;
图片 520            nextPage = this.currentPageIndex + 1;
图片 521            if (nextPage > pageCount)
图片 522图片 523            图片 524{ nextPage = 1; }
图片 525            //开始的索引页
图片 526            int startPageIndex = this.currentPageIndex;
图片 527            //要统计的页面总数
图片 528            int pageTotalCount = pageCount - this.currentPageIndex + 1;
图片 529            //如果当前页面不是首页则显示上一页
图片 530            if (this.currentPageIndex != 1)
图片 531图片 532            图片 533{
图片 534                this.writeLinkHref(output, prevPage, true,this .PrevPageText );
图片 535
图片 536            }
图片 537            else
图片 538图片 539            图片 540{
图片 541                this.writeLinkHref(output, 1  , false,this .PrevPageText  );
图片 542            
图片 543            }
图片 544            
图片 545            if (IsDisplayFirstText)
图片 546图片 547            图片 548{
图片 549                //回首页       
图片 550                if (this.currentPageIndex != 1)
图片 551图片 552                图片 553{
图片 554                    //如果当前页面不是首页则给首页文本加上链接
图片 555                    this.writeLinkHref(output, 1, true,this .goFirstText );
图片 556
图片 557                }
图片 558                else
图片 559图片 560                图片 561{
图片 562                    this.writeLinkHref(output, 1 , false,this .goFirstText  );
图片 563
图片 564                
图片 565                }
图片 566
图片 567            }
图片 568            //如果页数小于等于10页则不显示省略号
图片 569            intDefaultCount = this.iNextCount + this.iPrevCount;
图片 570图片 571            数字按钮内容#region 数字按钮内容
图片 572            output.RenderBeginTag(HtmlTextWriterTag.Span );
图片 573            if (pageCount <= intDefaultCount)
图片 574图片 575            图片 576{
图片 577                for (int kk = 1; kk <= pageCount; kk++)
图片 578图片 579                图片 580{
图片 581                    this.writeLinkHref(output, kk, true,"");
图片 582
图片 583                }
图片 584
图片 585            }
图片 586            else
图片 587图片 588            图片 589{
图片 590图片 591                记录数多于10#region 记录数多于10
图片 592                //省略号前显示5页
图片 593                if (pageTotalCount <= intDefaultCount)
图片 594图片 595                图片 596{
图片 597                    //如果要统计的页面数量小于分页前部分数量加分页后部分数量
图片 598                    //要统计的页面数量与分页前部分数量加分页后部分数量的差额
图片 599                    //分页栏总是显示分页前部分数量加分页后部分数量个页面链接
图片 600
图片 601                    for (int k = 1; k <= this.intDefaultCount; k++)
图片 602图片 603                    图片 604{
图片 605                        //当前页面数字
图片 606                        int iIndex = pageCount - this.intDefaultCount + k;
图片 607                        this.writeLinkHref(output,iIndex, true,"");
图片 608
图片 609                    }
图片 610
图片 611                }
图片 612                else
图片 613图片 614                图片 615{
图片 616
图片 617                    for (int k = 1; k <= this.iPrevCount; k++)
图片 618图片 619                    图片 620{
图片 621                        //当前页面数字
图片 622                        int iIndex = this.currentPageIndex + k - 1;
图片 623                        this.writeLinkHref(output, iIndex, true,"");
图片 624
图片 625
图片 626                    }
图片 627                    if (pageTotalCount > intDefaultCount)
图片 628图片 629                    图片 630{
图片 631                        //如果要统计的页面总数大于省略号前的记录加省略号后面的记录数量则显示 "图片 632"                       
图片 633                        output.Write(" 图片 634 ");
图片 635
图片 636                    }
图片 637                    for (int j = this.iPrevCount + 1; j <= this.intDefaultCount; j++)
图片 638图片 639                    图片 640{
图片 641                        //当前页面数字
图片 642                        int iIndex = pageCount - this.iNextCount + j - this.iPrevCount ;
图片 643                        this.writeLinkHref(output, iIndex, true,"");
图片 644                    }
图片 645
图片 646                }
图片 647                #endregion
图片 648
图片 649            }
图片 650            output.RenderEndTag();
图片 651            #endregion
图片 652            if (IsDisplayLastText)
图片 653图片 654            图片 655{
图片 656                //如果页面总数大于1则显示末页按钮
图片 657                if (this.pageCount > 1)
图片 658图片 659                图片 660{
图片 661                    if (this.currentPageIndex != pageCount)
图片 662图片 663                    图片 664{
图片 665                        this.writeLinkHref(output, pageCount, true,this .LastPageText );
图片 666                    }
图片 667                    else
图片 668图片 669                    图片 670{
图片 671                        this.writeLinkHref(output, 1 , false ,this .LastPageText );
图片 672                    
图片 673                    }
图片 674
图片 675
图片 676                }
图片 677
图片 678            }
图片 679            //下一页
图片 680            if (this.currentPageIndex != pageCount)
图片 681图片 682            图片 683{
图片 684
图片 685                this.writeLinkHref(output, nextPage, true,this .NextPageText );
图片 686
图片 687            }
图片 688            else
图片 689图片 690            图片 691{
图片 692                this.writeLinkHref(output, 1 , false,this .NextPageText );
图片 693            
图片 694            }
图片 695            if (this.IsInput)
图片 696图片 697            图片 698{
图片 699                //如果显示跳转文本框
图片 700                this.writeInput(output );
图片 701            
图片 702            }
图片 703            //标记结尾标记
图片 704            output.RenderEndTag();
图片 705            return "";
图片 706
图片 707        }
图片 708图片 709        /**//// <summary>
图片 710        /// 输出linkBtn链接地址属性
图片 711        /// </summary>
图片 712        /// <param name="output"></param>
图片 713        /// <param name="iValue"></param>
图片 714        /// <param name="IsDiplayUrl">是否显示文本外国投资</param>
图片 715        private void  writeLinkHref(HtmlTextWriter output,int  iValue,bool IsDiplayUrl,string navText)
图片 716图片 717        图片 718{
图片 719            if (IsDiplayUrl)
图片 720图片 721            图片 722{
图片 723
图片 724                if (this.UrlPaging == true && !DesignMode)
图片 725图片 726                图片 727{
图片 728                    //url分页
图片 729                    //当前页面地址
图片 730                    string pageUrl = Page.Request.Url.ToString();
图片 731                    //链接地址
图片 732                    if (pageUrl.IndexOf(this.UrlPageIndexName + "=") != -1)
图片 733图片 734                    图片 735{
图片 736                        //已经存在分页参数
图片 737                        //参数在链接中的索引
图片 738                        int pageIndex = pageUrl.IndexOf(this.UrlPageIndexName + "=");
图片 739                        //判断参数后面是否还有其它的参数
图片 740                        //余下的字符串
图片 741                        string sLast = pageUrl.Substring(pageIndex + this.UrlPageIndexName.Length);
图片 742                        string s = "";
图片 743                        if (sLast.IndexOf("&") != -1)
图片 744图片 745                        图片 746{
图片 747                            if (sLast.IndexOf("=") != -1)
图片 748图片 749                            图片 750{
图片 751                                //说明有参数
图片 752                                //第一个参数的索引
图片 753                                int iFirstIndex = sLast.IndexOf("&");
图片 754                                s = sLast.Substring(iFirstIndex);
图片 755                            }
图片 756
图片 757                        }
图片 758                        pageUrl = pageUrl.Substring(0, pageIndex + this.UrlPageIndexName.Length + 1) + iValue.ToString() + s;
图片 759
图片 760
图片 761                    }
图片 762                    else
图片 763图片 764                    图片 765{
图片 766                        //如果页面没有任何参数则加上?与参数
图片 767                        if (pageUrl.IndexOf("?") == -1)
图片 768图片 769                        图片 770{
图片 771                            pageUrl += "?" + this.UrlPageIndexName + "=";
图片 772
图片 773                        }
图片 774                        else
图片 775图片 776                        图片 777{
图片 778                            //如果只是没有page参数则加上些参数
图片 779                            pageUrl += "&" + this.UrlPageIndexName + "=";
图片 780
图片 781                        }
图片 782                        pageUrl += iValue.ToString();
图片 783
图片 784
图片 785                    }
图片 786                    this.writeUrlCss(iValue , output);
图片 787                    output.AddAttribute(HtmlTextWriterAttribute.Href, pageUrl);
图片 788                    output.RenderBeginTag(HtmlTextWriterTag.A);
图片 789                    if (navText != "")
图片 790图片 791                    图片 792{
图片 793                        output.Write(navText );
图片 794
图片 795                    }
图片 796                    else
图片 797图片 798                    图片 799{
图片 800                        output.Write(iValue.ToString ());
图片 801                    
图片 802                    }
图片 803                    
图片 804                    output.RenderEndTag();
图片 805                    output.Write(" ");
图片 806
图片 807
图片 808
图片 809                }
图片 810                else
图片 811图片 812                图片 813{
图片 814                    this.writeUrlCss(iValue, output);
图片 815                    output.AddAttribute(HtmlTextWriterAttribute.Href, GetHrefString(iValue));
图片 816                    output.RenderBeginTag(HtmlTextWriterTag.A);
图片 817                    if (navText != "")
图片 818图片 819                    图片 820{
图片 821                        output.Write(navText);
图片 822
图片 823                    }
图片 824                    else
图片 825图片 826                    图片 827{
图片 828                        output.Write(iValue.ToString ());
图片 829
图片 830                    }
图片 831                    
图片 832                    output.RenderEndTag();
图片 833                    output.Write(" ");
图片 834
图片 835                }
图片 836
图片 837
图片 838               
图片 839
图片 840            }
图片 841            else
图片 842图片 843            图片 844{
图片 845                
图片 846                output.Write(navText );
图片 847                output.Write(" ");
图片 848
图片 849            }
图片 850            
图片 851
图片 852        
图片 853        }
图片 854        //跳转到哪一页
图片 855        private string inputPageIndex;
图片 856图片 857        /**//// <summary>
图片 858        /// 跳转文本框
图片 859        /// </summary>
图片 860        /// <param name="writer"></param>
图片 861        private void writeInput(HtmlTextWriter writer)
图片 862图片 863        图片 864{
图片 865            //输入文本框
图片 866            string boxClientId = UniqueID + "_input";
图片 867            writer.Write("  ");
图片 868            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
图片 869            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "30px");
图片 870            writer.AddAttribute(HtmlTextWriterAttribute.Value, this.currentPageIndex .ToString());
图片 871            if (pageCount <= 1)
图片 872                writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
图片 873            writer.AddAttribute(HtmlTextWriterAttribute.Name, boxClientId);
图片 874            writer.AddAttribute(HtmlTextWriterAttribute.Id, boxClientId);
图片 875            writer.RenderBeginTag(HtmlTextWriterTag.Input);
图片 876            writer.RenderEndTag();
图片 877            writer.Write(" ");
图片 878            //提交按钮
图片 879            int iInputIndex = 1;
图片 880            int.TryParse(inputPageIndex,out iInputIndex );
图片 881            if (iInputIndex < 1)
图片 882图片 883            图片 884{ iInputIndex = 1; }
图片 885            if (iInputIndex > pageCount)
图片 886图片 887            图片 888{ iInputIndex = 1; }
图片 889            writer.AddAttribute(HtmlTextWriterAttribute.Href, GetHrefString());
图片 890            writer.RenderBeginTag(HtmlTextWriterTag.A);
图片 891            writer.Write("转到");
图片 892            writer.RenderEndTag();
图片 893        }
图片 894        #endregion
图片 895图片 896        控件本身方法#region 控件本身方法
图片 897        protected override void OnPreRender(EventArgs e)
图片 898图片 899        图片 900{
图片 901            base.OnPreRender(e);
图片 902        }
图片 903        protected override void RenderContents(HtmlTextWriter output)
图片 904图片 905        图片 906{
图片 907            AddAttributesToRender(output);
图片 908            //分页样式表信息
图片 909            if (!this.IsCustomStyle)
图片 910图片 911            图片 912{
图片 913                this.AddStyleFile(output);
图片 914
图片 915            }       
图片 916
图片 917            //写入分页信息
图片 918            this.CSgetPagerHtml(this.iRecordCount, this.iRowsCount, output);
图片 919
图片 920        }
图片 921图片 922        /**//// <summary>
图片 923        /// 控件加载事件
图片 924        /// </summary>
图片 925        /// <param name="e"></param>
图片 926        protected override void OnLoad(EventArgs e)
图片 927图片 928        图片 929{
图片 930            int i=0;
图片 931            if (this.UrlPaging==true &&!DesignMode )
图片 932图片 933            图片 934{
图片 935                //当前页面地址
图片 936                string  currentUrl = Page.Request.Url .ToString ();
图片 937                if (!Page.IsPostBack)
图片 938图片 939                图片 940{
图片 941                    int index;
图片 942                    int.TryParse(Page.Request.QueryString[UrlPageIndexName], out index);
图片 943                    if (index <= 0)
图片 944                        index = 1;
图片 945                    if(index >this .pageCount )
图片 946图片 947                    图片 948{index =1;}
图片 949                    PageChangingEventArgs args = new PageChangingEventArgs(index);
图片 950                    OnPageChanging(args);
图片 951                }
图片 952            }
图片 953            if (!DesignMode)
图片 954图片 955            图片 956{
图片 957                inputPageIndex = Page.Request.Form[UniqueID + "_input"];
图片 958                int .TryParse (inputPageIndex ,out i);
图片 959                if (i < 1 || i > this.pageCount)
图片 960图片 961                图片 962{ i = 1; }
图片 963                inputPageIndex = i.ToString();
图片 964                
图片 965            }
图片 966            base.OnLoad(e);
图片 967        }
图片 968        #endregion
图片 969        
图片 970     
图片 971        
图片 972图片 973        IPostBackEventHandler Implementation#region IPostBackEventHandler Implementation
图片 974
图片 975图片 976        /**//// <summary>
图片 977        /// 控件回发事件处理方法
图片 978        /// 实现 IPostBackEventHandle接口
图片 979        /// </summary>
图片 980        /// <param name="args">参数名称</param>
图片 981        public void RaisePostBackEvent(string args)
图片 982图片 983        图片 984{
图片 985            int pageIndex = this .currentPageIndex ;
图片 986            try
图片 987图片 988            图片 989{
图片 990                if (args == null || args == "")
图片 991                    args = inputPageIndex;
图片 992                pageIndex = int.Parse(args);
图片 993            }
图片 994图片 995            catch 图片 996{ }
图片 997            PageChangingEventArgs pcArgs = new PageChangingEventArgs(pageIndex);
图片 998            OnPageChanging(pcArgs);
图片 999        }
图片 1000
图片 1001
图片 1002        #endregion
图片 1003
图片 1004图片 1005        IPostBackDataHandler Implementation#region IPostBackDataHandler Implementation
图片 1006
图片 1007图片 1008        /**//// <summary>
图片 1009        /// 定义 ASP.NET 服务器控件为自动加载回发数据而必须实现的方法
图片 1010        /// </summary>
图片 1011        /// <param name="pkey"></param>
图片 1012        /// <param name="pcol"></param>
图片 1013        /// <returns></returns>
图片 1014        public virtual bool LoadPostData(string pkey, NameValueCollection pcol)
图片 1015图片 1016        图片 1017{
图片 1018            string str = pcol[UniqueID + "_input"];
图片 1019            if (str != null && str.Trim().Length > 0)
图片 1020图片 1021            图片 1022{
图片 1023                try
图片 1024图片 1025                图片 1026{
图片 1027                    int pindex = int.Parse(str);
图片 1028                    if (pindex > 0 && pindex <= this.pageCount)
图片 1029图片 1030                    图片 1031{
图片 1032                        inputPageIndex = str;
图片 1033                        Page.RegisterRequiresRaiseEvent(this);
图片 1034                    }
图片 1035                }
图片 1036图片 1037                catch 图片 1038{ }
图片 1039            }
图片 1040            return false;
图片 1041        }
图片 1042
图片 1043图片 1044        /**//// ASP.NET 服务器控件为自动加载回发数据而必须实现的方法
图片 1045图片 1046        public virtual void RaisePostDataChangedEvent() 图片 1047{ }
图片 1048        #endregion
图片 1049        
图片 1050图片 1051        /**//// <summary>
图片 1052        /// 注册有参数的linkbtn事件
图片 1053        /// </summary>
图片 1054        /// <param name="pageIndex">参数值.</param>
图片 1055        /// <returns>.</returns>
图片 1056        private string GetHrefString(int pageIndex)
图片 1057图片 1058        图片 1059{
图片 1060            if (!DesignMode)
图片 1061图片 1062            图片 1063{
图片 1064                return Page.ClientScript.GetPostBackClientHyperlink(this, pageIndex.ToString());
图片 1065
图片 1066            }
图片 1067图片 1068            else 图片 1069{ return ""; }
图片 1070            
图片 1071        }
图片 1072图片 1073        /**//// <summary>
图片 1074        /// 注册没有参数的linkbtn事件
图片 1075        /// </summary>
图片 1076        /// <returns></returns>
图片 1077        private string GetHrefString()
图片 1078图片 1079        图片 1080{
图片 1081
图片 1082            if (!DesignMode)
图片 1083图片 1084            图片 1085{
图片 1086                return Page.ClientScript.GetPostBackClientHyperlink(this, "");
图片 1087
图片 1088            }
图片 1089图片 1090            else 图片 1091{ return ""; }
图片 1092        }
图片 1093图片 1094        Private fields#region Private fields
图片 1095        private static readonly object EventPageChanging = new object();
图片 1096        private static readonly object EventPageChanged = new object();
图片 1097        #endregion
图片 1098图片 1099        Events#region Events
图片 1100
图片 1101图片 1102        /**//// <summary>
图片 1103        /// 分页前事件
图片 1104        /// </summary>
图片 1105        public event PageChangingEventHandler PageChanging
图片 1106图片 1107        图片 1108{
图片 1109            add
图片 1110图片 1111            图片 1112{
图片 1113                Events.AddHandler(EventPageChanging, value);
图片 1114            }
图片 1115            remove
图片 1116图片 1117            图片 1118{
图片 1119                Events.RemoveHandler(EventPageChanging, value);
图片 1120            }
图片 1121        }
图片 1122
图片 1123图片 1124        /**//// <summary>
图片 1125        /// 分页完成后事件
图片 1126        /// </summary>
图片 1127        public event EventHandler PageChanged
图片 1128图片 1129        图片 1130{
图片 1131            add
图片 1132图片 1133            图片 1134{
图片 1135                Events.AddHandler(EventPageChanged, value);
图片 1136            }
图片 1137            remove
图片 1138图片 1139            图片 1140{
图片 1141                Events.RemoveHandler(EventPageChanged, value);
图片 1142            }
图片 1143        }
图片 1144
图片 1145        #endregion
图片 1146
图片 1147图片 1148        EventsMethods#region EventsMethods
图片 1149
图片 1150图片 1151        /**//// <summary>
图片 1152        /// 分页前事件处理方法
图片 1153        /// </summary>
图片 1154        /// <param name="e"></param>
图片 1155        protected virtual void OnPageChanging(PageChangingEventArgs e)
图片 1156图片 1157        图片 1158{
图片 1159            PageChangingEventHandler handler = (PageChangingEventHandler)Events[EventPageChanging];
图片 1160            if (handler != null)
图片 1161图片 1162            图片 1163{
图片 1164                handler(this, e);
图片 1165                
图片 1166            }
图片 1167            this.currentPageIndex = e.NewPageIndex;
图片 1168            OnPageChanged(EventArgs.Empty);
图片 1169        }
图片 1170
图片 1171图片 1172        /**//// <summary>
图片 1173        /// 分页完成后事件处理方法
图片 1174        /// </summary>
图片 1175        /// <param name="e"></param>
图片 1176        protected virtual void OnPageChanged(EventArgs e)
图片 1177图片 1178        图片 1179{
图片 1180            EventHandler handler = (EventHandler)Events[EventPageChanged];
图片 1181            if (handler != null)
图片 1182                handler(this, e);
图片 1183        }
图片 1184
图片 1185        #endregion
图片 1186    }
图片 1187图片 1188    PageChangingEventHandler Delegate#region PageChangingEventHandler Delegate
图片 1189图片 1190    /**//// <summary>
图片 1191    /// 分页前委托
图片 1192    /// </summary>
图片 1193    /// <param name="src"></param>
图片 1194    /// <param name="e"></param>
图片 1195    public delegate void PageChangingEventHandler(object src, PageChangingEventArgs e);
图片 1196
图片 1197    #endregion
图片 1198
图片 1199图片 1200    PageChangingEventArgs Class#region PageChangingEventArgs Class
图片 1201图片 1202    /**//// <summary>
图片 1203    /// 分页委托参数类
图片 1204    /// </summary>
图片 1205    public sealed class PageChangingEventArgs : CancelEventArgs
图片 1206图片 1207    图片 1208{
图片 1209        //当前页面
图片 1210        private readonly int _newpageindex;
图片 1211        public PageChangingEventArgs(int newPageIndex)
图片 1212图片 1213        图片 1214{
图片 1215            _newpageindex = newPageIndex;
图片 1216        }
图片 1217        public int NewPageIndex
图片 1218图片 1219        图片 1220{
图片 1221图片 1222            get 图片 1223{ return _newpageindex; }
图片 1224        }
图片 1225    }
图片 1226    #endregion
图片 1227 
图片 1228}
图片 1229

  ///
  /// 获取文件大小
  ///
  /// 文件名
  /// 文件大小
  private long GetFileSize(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("SIZE " + Path.GetFileName(strFileName));
   long lSize=0;
   if(iReplyCode == 213)
   {
    lSize = Int64.Parse(strReply.Substring(4));
   }
   else
   {
    throw new IOException(strReply.Substring(4));
   }
   return lSize;
  }

using System.ComponentModel;

     

  ///
  /// 删除
  ///
  /// 待删除文件名
  public void Delete(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("DELE "+strFileName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }    

using System.Data;

  ///
  /// 重命名(如果新文件名与已有文件重名,将覆盖已有文件)
  ///
  /// 旧文件名
  /// 新文件名
  public void Rename(string strOldFileName,string strNewFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("RNFR "+strOldFileName);
   if(iReplyCode != 350)
   {
    throw new IOException(strReply.Substring(4));
   }
   //  如果新文件名与原有文件重名,将覆盖原有文件
   SendCommand("RNTO "+strNewFileName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
  #endregion

using System.Drawing;

  #region 上传和下载
  ///
  /// 下载一批文件
  ///
  /// 文件名的匹配字符串
  /// 本地目录(不得以结束)
  public void Get(string strFileNameMask,string strFolder)
  {
   if(!bConnected)
   {
    Connect();
   }
   string[] strFiles = Dir(strFileNameMask);
   foreach(string strFile in strFiles)
   {
    if(!strFile.Equals(""))//一般来说strFiles的最后一个元素可能是空字符串
    {
     Get(strFile,strFolder,strFile);
    }
   }
  }    

using System.IO;

  ///
  /// 下载一个文件
  ///
  /// 要下载的文件名
  /// 本地目录(不得以结束)
  /// 保存在本地时的文件名
  public void Get(string strRemoteFileName,string strFolder,string strLocalFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SetTransferType(TransferType.Binary);
   if (strLocalFileName.Equals(""))
   {
    strLocalFileName = strRemoteFileName;
   }
   if(!File.Exists(strLocalFileName))
   {
    Stream st = File.Create(strLocalFileName);
    st.Close();
   }
   FileStream output = new
   FileStream(strFolder + "\" + strLocalFileName,FileMode.Create);
   Socket socketData = CreateDataSocket();
   SendCommand("RETR " + strRemoteFileName);
   if(!(iReplyCode == 150 || iReplyCode == 125
   || iReplyCode == 226 || iReplyCode == 250))
   {
    throw new IOException(strReply.Substring(4));
   }
   while(true)
   {
    int iBytes = socketData.Receive(buffer, buffer.Length, 0);
    output.Write(buffer,0,iBytes);
    if(iBytes <= 0)
    {
     break;
    }
   }
   output.Close();
   if (socketData.Connected)
   {
    socketData.Close();
   }
   if(!(iReplyCode == 226 || iReplyCode == 250))
   {
    ReadReply();
    if(!(iReplyCode == 226 || iReplyCode == 250))
    {
     throw new IOException(strReply.Substring(4));
    }
   }
  }    

using System.Net;

  ///
  /// 上传一批文件
  ///
  /// 本地目录(不得以结束)
  /// 文件名匹配字符(可以包含*和?)
  public void Put(string strFolder,string strFileNameMask)
  {
   string[] strFiles = Directory.GetFiles(strFolder,strFileNameMask);
   foreach(string strFile in strFiles)
   {
    //strFile是完整的文件名(包含路径)
    Put(strFile);
   }
  }    

using System.Text;

  ///
  /// 上传一个文件
  ///
  /// 本地文件名
  public void Put(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   Socket socketData = CreateDataSocket();
   SendCommand("STOR "+Path.GetFileName(strFileName));
   if( !(iReplyCode == 125 || iReplyCode == 150) )
   {
    throw new IOException(strReply.Substring(4));
   }
   FileStream input = new
   FileStream(strFileName,FileMode.Open);
   int iBytes = 0;
   while ((iBytes = input.Read(buffer,0,buffer.Length)) > 0)
   {
    socketData.Send(buffer, iBytes, 0);
   }
   input.Close();
   if (socketData.Connected)
   {
    socketData.Close();
   }
   if(!(iReplyCode == 226 || iReplyCode == 250))
   {
    ReadReply();
    if(!(iReplyCode == 226 || iReplyCode == 250))
    {
     throw new IOException(strReply.Substring(4));
    }
   }
  }
   
  #endregion

using System.Web;

  #region 目录操作
  ///
  /// 创建目录
  ///
  /// 目录名
  public void MkDir(string strDirName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("MKD "+strDirName);
   if(iReplyCode != 257)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
   
 
  ///
  /// 删除目录
  ///
  /// 目录名
  public void RmDir(string strDirName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("RMD "+strDirName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
   
 
  ///
  /// 改变目录
  ///
  /// 新的工作目录名
  public void ChDir(string strDirName)
  {
   if(strDirName.Equals(".") || strDirName.Equals(""))
   {
    return;
   }
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("CWD "+strDirName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
   this.strRemotePath = strDirName;
  }
   
  #endregion

namespace Test.Com

  #region 内部变量
  ///
  /// 服务器返回的应答信息(包含应答码)
  ///
  private string strMsg;
  ///
  /// 服务器返回的应答信息(包含应答码)
  ///
  private string strReply;
  ///
  /// 服务器返回的应答码
  ///
  private int iReplyCode;
  ///
  /// 进行控制连接的socket
  ///
  private Socket socketControl;
  ///
  /// 传输模式
  ///
  private TransferType trType;
  ///
  /// 接收和发送数据的缓冲区
  ///
  private static int BLOCK_SIZE = 512;
  Byte[] buffer = new Byte[BLOCK_SIZE];
  ///
  /// 编码方式
  ///
  Encoding ASCII = Encoding.ASCII;
  #endregion

{

  #region 内部函数
  ///
  /// 将一行应答字符串记录在strReply和strMsg
  /// 应答码记录在iReplyCode
  ///
  private void ReadReply()
  {
   strMsg = "";
   strReply = ReadLine();
   iReplyCode = Int32.Parse(strReply.Substring(0,3));
  }

/// <summary>

  ///
  /// 建立进行数据连接的socket
  ///
  /// 数据连接socket
  private Socket CreateDataSocket()
  {
   SendCommand("PASV");
   if(iReplyCode != 227)
   {
    throw new IOException(strReply.Substring(4));
   }
   int index1 = strReply.IndexOf('(');
   int index2 = strReply.IndexOf(')');
   string ipData =
    strReply.Substring(index1+1,index2-index1-1);
   int[] parts = new int[6];
   int len = ipData.Length;
   int partCount = 0;
   string buf="";
   for (int i = 0; i < len && partCount <= 6; i++)
   {
    char ch = Char.Parse(ipData.Substring(i,1));
    if (Char.IsDigit(ch))
     buf+=ch;
    else if (ch != ',')
    {
     throw new IOException("Malformed PASV strReply: " +
      strReply);
    }
    if (ch == ',' || i+1 == len)
    {
     try
     {
      parts[partCount++] = Int32.Parse(buf);
      buf="";
     }
     catch (Exception)
     {
      throw new IOException("Malformed PASV strReply: " +
       strReply);
     }
    }
   }
   string ipAddress = parts[0] + "."+ parts[1]+ "." +
    parts[2] + "." + parts[3];
   int port = (parts[4] << 8) + parts[5];
   Socket s = new
    Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
   IPEndPoint ep = new
    IPEndPoint(IPAddress.Parse(ipAddress), port);
   try
   {
    s.Connect(ep);
   }
   catch(Exception)
   {
    throw new IOException("Can't connect to remote server");
   }
   return s;
  }

/// 功能:取得Internet上的URL页的源码

  ///
  /// 关闭socket连接(用于登录以前)
  ///
  private void CloseSocketConnect()
  {
   if(socketControl!=null)
   {
    socketControl.Close();
    socketControl = null;
   }
   bConnected = false;
  }
 
  ///
  /// 读取Socket返回的所有字符串
  ///
  /// 包含应答码的字符串行
  private string ReadLine()
  {
   while(true)
   {
    int iBytes = socketControl.Receive(buffer, buffer.Length, 0);
    strMsg += ASCII.GetString(buffer, 0, iBytes);
    if(iBytes < buffer.Length)
    {
     break;
    }
   }
   char[] seperator = {'n'};
   string[] mess = strMsg.Split(seperator);
   if(strMsg.Length > 2)
   {
    strMsg = mess[mess.Length-2];
    //seperator[0]是10,换行符是由13和0组成的,分隔后10后面虽没有字符串,
    //但也会分配为空字符串给后面(也是最后一个)字符串数组,
    //所以最后一个mess是没用的空字符串
    //但为什么不直接取mess[0],因为只有最后一行字符串应答码与信息之间有空格
   }
   else
   {
    strMsg = mess[0];
   }
   if(!strMsg.Substring(3,1).Equals(" "))//返回字符串正确的是以应答码(如220开头,后面接一空格,再接问候字符串)
   {
    return ReadLine();
   }
   return strMsg;
  }

/// 创建:2004-03-22

  ///
  /// 发送命令并获取应答码和最后一行应答字符串
  ///
  /// 命令
  private void SendCommand(String strCommand)
  {
   Byte[] cmdBytes =
   Encoding.ASCII.GetBytes((strCommand+"rn").ToCharArray());
   socketControl.Send(cmdBytes, cmdBytes.Length, 0);
   ReadReply();
  }

/// 作者:Rexsp MSN:yubo@x263.net

  #endregion
 }
}

/// </summary>

namespace zhangyuk.net.csdn.blog.ftpclient
{
 ///
 /// FTP Client
 ///
 public class FTPClient
 {
  #region 构造函数
  ///
  /// 缺省构造函数
  ///
  public FTPClient()
  {
   strRemoteHost  = "";
   strRemotePath  = "";
   strRemoteUser  = "";
   strRemotePass  = "";
   strRemotePort  = 21;
   bConnected     = false;
  }

public class GetPageCode

  ///
  /// 构造函数
  ///
  ///
  ///
  ///
  ///
  ///
  public FTPClient( string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort )
  {
   strRemoteHost  = remoteHost;
   strRemotePath  = remotePath;
   strRemoteUser  = remoteUser;
   strRemotePass  = remotePass;
   strRemotePort  = remotePort;
   Connect();
  }
  #endregion

{

  #region 登陆
  ///
  /// FTP服务器IP地址
  ///
  private string strRemoteHost;
  public string RemoteHost
  {
   get
   {
    return strRemoteHost;
   }
   set
   {
    strRemoteHost = value;
   }
  }
  ///
  /// FTP服务器端口
  ///
  private int strRemotePort;
  public int RemotePort
  {
   get
   {
    return strRemotePort;
   }
   set
   {
    strRemotePort = value;
   }
  }
  ///
  /// 当前服务器目录
  ///
  private string strRemotePath;
  public string RemotePath
  {
   get
   {
    return strRemotePath;
   }
   set
   {
    strRemotePath = value;
   }
  }
  ///
  /// 登录用户账号
  ///
  private string strRemoteUser;
  public string RemoteUser
  {
   set
   {
    strRemoteUser = value;
   }
  }
  ///
  /// 用户登录密码
  ///
  private string strRemotePass;
  public string RemotePass
  {
   set
   {
    strRemotePass = value;
   }
  }

#region 私有变量

  ///
  /// 是否登录
  ///
  private Boolean bConnected;
  public bool Connected
  {
   get
   {
    return bConnected;
   }
  }
  #endregion

/// <summary>

  #region 链接
  ///
  /// 建立连接
  ///
  public void Connect()
  {
   socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
   IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
   // 链接
   try
   {
    socketControl.Connect(ep);
   }
   catch(Exception)
   {
    throw new IOException("Couldn't connect to remote server");
   }

/// 网页URL地址

   // 获取应答码
   ReadReply();
   if(iReplyCode != 220)
   {
    DisConnect();
    throw new IOException(strReply.Substring(4));
   }

/// </summary>

   // 登陆
   SendCommand("USER "+strRemoteUser);
   if( !(iReplyCode == 331 || iReplyCode == 230) )
   {
    CloseSocketConnect();//关闭连接
    throw new IOException(strReply.Substring(4));
   }
   if( iReplyCode != 230 )
   {
    SendCommand("PASS "+strRemotePass);
    if( !(iReplyCode == 230 || iReplyCode == 202) )
    {
     CloseSocketConnect();//关闭连接
     throw new IOException(strReply.Substring(4));
    }
   }
   bConnected = true;

private string url=null;

   // 切换到目录
   ChDir(strRemotePath);
  }    

/// <summary>

  ///
  /// 关闭连接
  ///
  public void DisConnect()
  {
   if( socketControl != null )
   {
    SendCommand("QUIT");
   }
   CloseSocketConnect();
  }

/// 是否使用代码服务器:0 不使用 1 使用代理服务器

  #endregion

/// </summary>

  #region 传输模式

private int proxyState=0;

  ///
  /// 传输模式:二进制类型、ASCII类型
  ///
  public enum TransferType {Binary,ASCII};

/// <summary>

  ///
  /// 设置传输模式
  ///
  /// 传输模式
  public void SetTransferType(TransferType ttType)
  {
   if(ttType == TransferType.Binary)
   {
    SendCommand("TYPE I");//binary类型传输
   }
   else
   {
    SendCommand("TYPE A");//ASCII类型传输
   }
   if (iReplyCode != 200)
   {
    throw new IOException(strReply.Substring(4));
   }
   else
   {
    trType = ttType;
   }
  }

/// 代理服务器地址

  ///
  /// 获得传输模式
  ///
  /// 传输模式
  public TransferType GetTransferType()
  {
   return trType;
  }
   
  #endregion

/// </summary>

  #region 文件操作
  ///
  /// 获得文件列表
  ///
  /// 文件名的匹配字符串
  ///
  public string[] Dir(string strMask)
  {
   // 建立链接
   if(!bConnected)
   {
    Connect();
   }

private string proxyAddress=null;

   //建立进行数据连接的socket
   Socket socketData = CreateDataSocket();
  
   //传送命令
   SendCommand("NLST " + strMask);

/// <summary>

   //分析应答代码
   if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
   {
    throw new IOException(strReply.Substring(4));
   }

/// 代理服务器端口

   //获得结果
   strMsg = "";
   while(true)
   {
    int iBytes = socketData.Receive(buffer, buffer.Length, 0);
    strMsg += ASCII.GetString(buffer, 0, iBytes);
    if(iBytes < buffer.Length)
    {
     break;
    }
   }
   char[] seperator = {'n'};
   string[] strsFileList = strMsg.Split(seperator);
   socketData.Close();//数据socket关闭时也会有返回码
   if(iReplyCode != 226)
   {
    ReadReply();
    if(iReplyCode != 226)
    {
     throw new IOException(strReply.Substring(4));
    }
   }
   return strsFileList;
  }    

/// </summary>

  ///
  /// 获取文件大小
  ///
  /// 文件名
  /// 文件大小
  private long GetFileSize(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("SIZE " + Path.GetFileName(strFileName));
   long lSize=0;
   if(iReplyCode == 213)
   {
    lSize = Int64.Parse(strReply.Substring(4));
   }
   else
   {
    throw new IOException(strReply.Substring(4));
   }
   return lSize;
  }

private string proxyPort=null;

  ///
  /// 删除
  ///
  /// 待删除文件名
  public void Delete(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("DELE "+strFileName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }    

/// <summary>

  ///
  /// 重命名(如果新文件名与已有文件重名,将覆盖已有文件)
  ///
  /// 旧文件名
  /// 新文件名
  public void Rename(string strOldFileName,string strNewFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("RNFR "+strOldFileName);
   if(iReplyCode != 350)
   {
    throw new IOException(strReply.Substring(4));
   }
   //  如果新文件名与原有文件重名,将覆盖原有文件
   SendCommand("RNTO "+strNewFileName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
  #endregion

/// 代理服务器用户名

  #region 上传和下载
  ///
  /// 下载一批文件
  ///
  /// 文件名的匹配字符串
  /// 本地目录(不得以结束)
  public void Get(string strFileNameMask,string strFolder)
  {
   if(!bConnected)
   {
    Connect();
   }
   string[] strFiles = Dir(strFileNameMask);
   foreach(string strFile in strFiles)
   {
    if(!strFile.Equals(""))//一般来说strFiles的最后一个元素可能是空字符串
    {
     Get(strFile,strFolder,strFile);
    }
   }
  }    

/// </summary>

  ///
  /// 下载一个文件
  ///
  /// 要下载的文件名
  /// 本地目录(不得以结束)
  /// 保存在本地时的文件名
  public void Get(string strRemoteFileName,string strFolder,string strLocalFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SetTransferType(TransferType.Binary);
   if (strLocalFileName.Equals(""))
   {
    strLocalFileName = strRemoteFileName;
   }
   if(!File.Exists(strLocalFileName))
   {
    Stream st = File.Create(strLocalFileName);
    st.Close();
   }
   FileStream output = new
   FileStream(strFolder + "\" + strLocalFileName,FileMode.Create);
   Socket socketData = CreateDataSocket();
   SendCommand("RETR " + strRemoteFileName);
   if(!(iReplyCode == 150 || iReplyCode == 125
   || iReplyCode == 226 || iReplyCode == 250))
   {
    throw new IOException(strReply.Substring(4));
   }
   while(true)
   {
    int iBytes = socketData.Receive(buffer, buffer.Length, 0);
    output.Write(buffer,0,iBytes);
    if(iBytes <= 0)
    {
     break;
    }
   }
   output.Close();
   if (socketData.Connected)
   {
    socketData.Close();
   }
   if(!(iReplyCode == 226 || iReplyCode == 250))
   {
    ReadReply();
    if(!(iReplyCode == 226 || iReplyCode == 250))
    {
     throw new IOException(strReply.Substring(4));
    }
   }
  }    

private string proxyAccount=null;

  ///
  /// 上传一批文件
  ///
  /// 本地目录(不得以结束)
  /// 文件名匹配字符(可以包含*和?)
  public void Put(string strFolder,string strFileNameMask)
  {
   string[] strFiles = Directory.GetFiles(strFolder,strFileNameMask);
   foreach(string strFile in strFiles)
   {
    //strFile是完整的文件名(包含路径)
    Put(strFile);
   }
  }    

/// <summary>

  ///
  /// 上传一个文件
  ///
  /// 本地文件名
  public void Put(string strFileName)
  {
   if(!bConnected)
   {
    Connect();
   }
   Socket socketData = CreateDataSocket();
   SendCommand("STOR "+Path.GetFileName(strFileName));
   if( !(iReplyCode == 125 || iReplyCode == 150) )
   {
    throw new IOException(strReply.Substring(4));
   }
   FileStream input = new
   FileStream(strFileName,FileMode.Open);
   int iBytes = 0;
   while ((iBytes = input.Read(buffer,0,buffer.Length)) > 0)
   {
    socketData.Send(buffer, iBytes, 0);
   }
   input.Close();
   if (socketData.Connected)
   {
    socketData.Close();
   }
   if(!(iReplyCode == 226 || iReplyCode == 250))
   {
    ReadReply();
    if(!(iReplyCode == 226 || iReplyCode == 250))
    {
     throw new IOException(strReply.Substring(4));
    }
   }
  }
   
  #endregion

/// 代理服务器密码

  #region 目录操作
  ///
  /// 创建目录
  ///
  /// 目录名
  public void MkDir(string strDirName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("MKD "+strDirName);
   if(iReplyCode != 257)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
   
 
  ///
  /// 删除目录
  ///
  /// 目录名
  public void RmDir(string strDirName)
  {
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("RMD "+strDirName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
  }
   
 
  ///
  /// 改变目录
  ///
  /// 新的工作目录名
  public void ChDir(string strDirName)
  {
   if(strDirName.Equals(".") || strDirName.Equals(""))
   {
    return;
   }
   if(!bConnected)
   {
    Connect();
   }
   SendCommand("CWD "+strDirName);
   if(iReplyCode != 250)
   {
    throw new IOException(strReply.Substring(4));
   }
   this.strRemotePath = strDirName;
  }
   
  #endregion

/// </summary>

  #region 内部变量
  ///
  /// 服务器返回的应答信息(包含应答码)
  ///
  private string strMsg;
  ///
  /// 服务器返回的应答信息(包含应答码)
  ///
  private string strReply;
  ///
  /// 服务器返回的应答码
  ///
  private int iReplyCode;
  ///
  /// 进行控制连接的socket
  ///
  private Socket socketControl;
  ///
  /// 传输模式
  ///
  private TransferType trType;
  ///
  /// 接收和发送数据的缓冲区
  ///
  private static int BLOCK_SIZE = 512;
  Byte[] buffer = new Byte[BLOCK_SIZE];
  ///
  /// 编码方式
  ///
  Encoding ASCII = Encoding.ASCII;
  #endregion

private string proxyPassword=null;

  #region 内部函数
  ///
  /// 将一行应答字符串记录在strReply和strMsg
  /// 应答码记录在iReplyCode
  ///
  private void ReadReply()
  {
   strMsg = "";
   strReply = ReadLine();
   iReplyCode = Int32.Parse(strReply.Substring(0,3));
  }

/// <summary>

  ///
  /// 建立进行数据连接的socket
  ///
  /// 数据连接socket
  private Socket CreateDataSocket()
  {
   SendCommand("PASV");
   if(iReplyCode != 227)
   {
    throw new IOException(strReply.Substring(4));
   }
   int index1 = strReply.IndexOf('(');
   int index2 = strReply.IndexOf(')');
   string ipData =
    strReply.Substring(index1+1,index2-index1-1);
   int[] parts = new int[6];
   int len = ipData.Length;
   int partCount = 0;
   string buf="";
   for (int i = 0; i < len && partCount <= 6; i++)
   {
    char ch = Char.Parse(ipData.Substring(i,1));
    if (Char.IsDigit(ch))
     buf+=ch;
    else if (ch != ',')
    {
     throw new IOException("Malformed PASV strReply: " +
      strReply);
    }
    if (ch == ',' || i+1 == len)
    {
     try
     {
      parts[partCount++] = Int32.Parse(buf);
      buf="";
     }
     catch (Exception)
     {
      throw new IOException("Malformed PASV strReply: " +
       strReply);
     }
    }
   }
   string ipAddress = parts[0] + "."+ parts[1]+ "." +
    parts[2] + "." + parts[3];
   int port = (parts[4] << 8) + parts[5];
   Socket s = new
    Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
   IPEndPoint ep = new
    IPEndPoint(IPAddress.Parse(ipAddress), port);
   try
   {
    s.Connect(ep);
   }
   catch(Exception)
   {
    throw new IOException("Can't connect to remote server");
   }
   return s;
  }

/// 代理服务器域

  ///
  /// 关闭socket连接(用于登录以前)
  ///
  private void CloseSocketConnect()
  {
   if(socketControl!=null)
   {
    socketControl.Close();
    socketControl = null;
   }
   bConnected = false;
  }
 
  ///
  /// 读取Socket返回的所有字符串
  ///
  /// 包含应答码的字符串行
  private string ReadLine()
  {
   while(true)
   {
    int iBytes = socketControl.Receive(buffer, buffer.Length, 0);
    strMsg += ASCII.GetString(buffer, 0, iBytes);
    if(iBytes < buffer.Length)
    {
     break;
    }
   }
   char[] seperator = {'n'};
   string[] mess = strMsg.Split(seperator);
   if(strMsg.Length > 2)
   {
    strMsg = mess[mess.Length-2];
    //seperator[0]是10,换行符是由13和0组成的,分隔后10后面虽没有字符串,
    //但也会分配为空字符串给后面(也是最后一个)字符串数组,
    //所以最后一个mess是没用的空字符串
    //但为什么不直接取mess[0],因为只有最后一行字符串应答码与信息之间有空格
   }
   else
   {
    strMsg = mess[0];
   }
   if(!strMsg.Substring(3,1).Equals(" "))//返回字符串正确的是以应答码(如220开头,后面接一空格,再接问候字符串)
   {
    return ReadLine();
   }
   return strMsg;
  }

/// </summary>

  ///
  /// 发送命令并获取应答码和最后一行应答字符串
  ///
  /// 命令
  private void SendCommand(String strCommand)
  {
   Byte[] cmdBytes =
   Encoding.ASCII.GetBytes((strCommand+"rn").ToCharArray());
   socketControl.Send(cmdBytes, cmdBytes.Length, 0);
   ReadReply();
  }

private string proxyDomain=null;

  #endregion
 }
}

/// <summary>

 

/// 输出文件路径

<> <>

/// </summary>

private string outFilePath=null;

/// <summary>

/// 输出的字符串

/// </summary>

private string outString=null;

/// <summary>

/// 提示信息

/// </summary>

private string noteMessage;

#endregion

#region 公共属性

/// <summary>

/// 欲读取的URL地址

/// </summary>

public string Url

{

get{return url;}

set{url=value;}

}

/// <summary>

/// 是否使用代理服务器标志

/// </summary>

public int ProxyState

{

get{return proxyState;}

set{proxyState=value;}

}

/// <summary>

/// 代理服务器地址

/// </summary>

public string ProxyAddress

{

get{return proxyAddress;}

set{proxyAddress=value;}

}

/// <summary>

/// 代理服务器端口

/// </summary>

public string ProxyPort

{

get{return proxyPort;}

set{proxyPort=value;}

}

/// <summary>

/// 代理服务器账号

/// </summary>

public string ProxyAccount

{

get{return proxyAccount;}

set{proxyAccount=value;}

}

/// <summary>

/// 代理服务器密码

/// </summary>

public string ProxyPassword

{

get{return proxyPassword;}

set{proxyPassword=value;}

}

/// <summary>

/// 代理服务器域

/// </summary>

public string ProxyDomain

{

get{return proxyDomain;}

set{proxyDomain=value;}

}

/// <summary>

/// 输出文件路径

/// </summary>

public string OutFilePath

{

get{return outFilePath;}

set{outFilePath=value;}

}

/// <summary>

/// 返回的字符串

/// </summary>

public string OutString

{

get{return outString;}

}

/// <summary>

/// 返回提示信息

/// </summary>

public string NoteMessage

{

get{return noteMessage;}

}

#endregion

#region 构造函数

public GetPageCode()

{

}

#endregion

#region 公共方法

/// <summary>

/// 读取指定URL地址,存到指定文件中

/// </summary>

public void GetSource()

{

WebRequest request = WebRequest.Create(this.url);

//使用代理服务器的处理

if(this.proxyState==1)

{

//默认读取80端口的数据

if(this.proxyPort==null)

this.ProxyPort="80";

WebProxy myProxy=new WebProxy();

myProxy = (WebProxy)request.Proxy;

myProxy.Address = new Uri(this.ProxyAddress+":"+this.ProxyPort);

myProxy.Credentials = new NetworkCredential(this.proxyAccount, this.proxyPassword, this.ProxyDomain);

request.Proxy = myProxy;

}

try

{

//请求服务

WebResponse response = request.GetResponse();

//返回信息

Stream resStream = response.GetResponseStream();

StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);

string tempCode= sr.ReadToEnd();

resStream.Close();

sr.Close();

//如果输出文件路径为空,便将得到的内容赋给OutString属性

if(this.outFilePath==null)

{

this.outString=tempCode;

}

else

{

FileInfo fi = new FileInfo(this.outFilePath);

//如果存在文件则先干掉

if(fi.Exists)

fi.Delete();

StreamWriter sw = new StreamWriter(this.outFilePath,true,Encoding.Default);

sw.Write(tempCode);

sw.Flush();

sw.Close();

}

}

catch

{

this.noteMessage="出错了,请检查网络是否连通;";

}

}

#endregion

}

}

本文由10bet手机官网发布于面向对象,转载请注明出处:将人民币的数字表示转化成大写表示,一个FTP客户端的C

上一篇:如何处理JS与smarty标签的冲突,smarty定界符与js冲突的问题 下一篇:没有了
猜你喜欢
热门排行
精彩图文