Base64加密解密
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 沃狐新浪博客推广系统 { class Base64 { /// <summary> /// 将字符串使用base64算法加密 /// </summary> /// <param name="code_type">编码类型(编码名称) /// * 代码页 名称 /// * 1200 "UTF-16LE"、"utf-16"、"ucs-2"、"unicode"或"ISO-10646-UCS-2" /// * 1201 "UTF-16BE"或"unicodeFFFE" /// * 1252 "windows-1252" /// * 65000 "utf-7"、"csUnicode11UTF7"、"unicode-1-1-utf-7"、"unicode-2-0-utf-7"、"x-unicode-1-1-utf-7"或"x-unicode-2-0-utf-7" /// * 65001 "utf-8"、"unicode-1-1-utf-8"、"unicode-2-0-utf-8"、"x-unicode-1-1-utf-8"或"x-unicode-2-0-utf-8" /// * 20127 "us-ascii"、"us"、"ascii"、"ANSI_X3.4-1968"、"ANSI_X3.4-1986"、"cp367"、"csASCII"、"IBM367"、"iso-ir-6"、"ISO646-US"或"ISO_646.irv:1991" /// * 54936 "GB18030" /// </param> /// <param name="code">待加密的字符串</param> /// <returns>加密后的字符串</returns> public string EncodeBase64(string code_type, string code) { string encode = ""; byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code); //将一组字符编码为一个字节序列. try { encode = Convert.ToBase64String(bytes); //将8位无符号整数数组的子集转换为其等效的,以64为基的数字编码的字符串形式. } catch { encode = code; } return encode; } /// <summary> /// 将字符串使用base64算法解密 /// </summary> /// <param name="code_type">编码类型</param> /// <param name="code">已用base64算法加密的字符串</param> /// <returns>解密后的字符串</returns> public string DecodeBase64(string code_type, string code) { string decode = ""; byte[] bytes = Convert.FromBase64String(code); //将2进制编码转换为8位无符号整数数组. try { decode = Encoding.GetEncoding(code_type).GetString(bytes); //将指定字节数组中的一个字节序列解码为一个字符串。 } catch { decode = code; } return decode; } } }
BitmapRegion绘制图形控件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace 沃狐新浪博客推广系统 { class BitmapRegion { public BitmapRegion() { } /// <summary> /// Create and apply the region on the supplied control /// </summary> /// The Control object to apply the region to// /// The Bitmap object to create the region from public void CreateControlRegion(Control control, Bitmap bitmap) { // Return if control and bitmap are null if (control == null || bitmap == null) return; // Set our control's size to be the same as the bitmap control.Width = bitmap.Width; control.Height = bitmap.Height; // Check if we are dealing with Form here if (control is System.Windows.Forms.Form) { // Cast to a Form object Form form = (Form)control; // Set our form's size to be a little larger that the bitmap just // in case the form's border style is not set to none in the first place form.Width += 15; form.Height += 35; // No border form.FormBorderStyle = FormBorderStyle.None; // Set bitmap as the background image form.BackgroundImage = bitmap; // Calculate the graphics path based on the bitmap supplied GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap); // Apply new region form.Region = new Region(graphicsPath); } // Check if we are dealing with Button here else if (control is System.Windows.Forms.Button) { // Cast to a button object Button button = (Button)control; // Do not show button text button.Text = ""; // Change cursor to hand when over button button.Cursor = Cursors.Hand; // Set background image of button button.BackgroundImage = bitmap; // Calculate the graphics path based on the bitmap supplied GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap); // Apply new region button.Region = new Region(graphicsPath); } } /// <summary> /// Calculate the graphics path that representing the figure in the bitmap /// excluding the transparent color which is the top left pixel. /// </summary> /// The Bitmap object to calculate our graphics path from /// <returns>Calculated graphics path</returns> private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap) { // Create GraphicsPath for our bitmap calculation GraphicsPath graphicsPath = new GraphicsPath(); // Use the top left pixel as our transparent color Color colorTransparent = bitmap.GetPixel(0, 0); // This is to store the column value where an opaque pixel is first found. // This value will determine where we start scanning for trailing opaque pixels. int colOpaquePixel = 0; // Go through all rows (Y axis) for (int row = 0; row < bitmap.Height; row++) { // Reset value colOpaquePixel = 0; // Go through all columns (X axis) for (int col = 0; col < bitmap.Width; col++) { // If this is an opaque pixel, mark it and search for anymore trailing behind if (bitmap.GetPixel(col, row) != colorTransparent) { // Opaque pixel found, mark current position colOpaquePixel = col; // Create another variable to set the current pixel position int colNext = col; // Starting from current found opaque pixel, search for anymore opaque pixels // trailing behind, until a transparent pixel is found or minimum width is reached for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++) if (bitmap.GetPixel(colNext, row) == colorTransparent) break; // Form a rectangle for line of opaque pixels found and add it to our graphics path graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1)); // No need to scan the line of opaque pixels just found col = colNext; } } } // Return calculated graphics path return graphicsPath; } } }
CatchUrls抓取网页url
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Net; using System.IO; using System.Collections; using System.Text.RegularExpressions; namespace 沃狐新浪博客推广系统 { class CatchUrls { string strCode; ArrayList alLinks; // 获取指定网页的HTML代码 private string url = ""; public string URL { get { return url; } set { url = value; } } public string htmlCode; public string GetPageSource() { Uri uri = new Uri(URL); // http:// blog.sina.com.cn/lm/oldrank/20120615/all.html HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse(); hwReq.Method = "Get"; hwReq.KeepAlive = false; StreamReader reader = new StreamReader(hwRes.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312")); return reader.ReadToEnd(); } // 提取HTML代码中的网址 public ArrayList GetHyperLinks() { ArrayList al = new ArrayList(); string strRegex = @"http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?"; Regex r = new Regex(strRegex, RegexOptions.IgnoreCase); MatchCollection m = r.Matches(htmlCode); //progressBar1.Maximum = m.Count; for (int i = 0; i <= m.Count - 1; i++) { bool rep = false; string strNew = m[i].ToString(); // 过滤重复的URL foreach (string str in al) { if (strNew == str) { rep = true; break; } } if (!rep) { if (strNew.IndexOf("blog.sina.com.cn/u") >= 0) { strNew = strNew.Replace("http://blog.sina.com.cn/u/", ""); al.Add(strNew.Trim()); } } } al.Sort();//重新排序 return al; } // static string GetURLContent(string url, string EncodingType) { string PetiResp = ""; Stream mystream; System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); req.AllowAutoRedirect = true; System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse(); if (resp.StatusCode == System.Net.HttpStatusCode.OK) { mystream = resp.GetResponseStream(); System.Text.Encoding encode = System.Text.Encoding.GetEncoding(EncodingType); StreamReader readStream = new StreamReader(mystream, encode); char[] cCont = new char[500]; int count = readStream.Read(cCont, 0, 256); while (count > 0) { // Dumps the 256 characters on a string and displays the string to the console. String str = new String(cCont, 0, count); PetiResp += str; count = readStream.Read(cCont, 0, 256); } resp.Close(); return PetiResp; } resp.Close(); return null; } // 获取网址的域名后缀 static string GetDomain(string strURL) { string retVal; string strRegex = @"(.com/|.net/|.cn/|.org/|.gov/|.cn/)"; Regex r = new Regex(strRegex, RegexOptions.IgnoreCase); Match m = r.Match(strURL); retVal = m.ToString(); strRegex = @".|/$"; retVal = Regex.Replace(retVal, strRegex, "").ToString(); if (retVal == "") retVal = "other"; return retVal; } //public string BaseURLs; } }
CookieComputer提取post模拟登陆网站cookie.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Web; using System.IO; using System.Collections; namespace 沃狐新浪博客推广系统 { class CookieComputer { #region 通过登录获取cookie信息参数 //登录链接 private static string url = ""; /// <summary> /// 登录基URL,默认为空 /// </summary> public static string Url { get { return url; } set { url = value; } } //用户名 private static string username = ""; /// <summary> /// 登录用户名,默认为空 /// </summary> public static string Username { get { return username; } set { username = value; } } //密码 private static string password = ""; /// <summary> /// 登录密码,默认为空 /// </summary> public static string Password { get { return password; } set { password = value; } } //表单需要提交的参数,注意改为你已注册的信息。 private static string postDate=""; /// <summary> /// 表单需要提交的参数,注意改为你已注册的信息。 /// </summary> public static string PostDate { get { return postDate; } set { postDate = value; } } #endregion //写成无参数方便线程调用 /// <summary> /// 获取目标网站cookie /// </summary> /// <returns>CookieContainer</returns> public static CookieContainer Get_SinaLogin() { //新建cookie容器 CookieContainer CookiC = new CookieContainer(); //处理表单的绝对URL地址 string FormURL = Url; //表单需要提交的参数,注意改为你已注册的信息。 // "username=" + Username + "&password=" + Password; string FormData = PostDate; //设定编码格式 Encoding encoding = Encoding.UTF8; //将编码转换成字节数组 byte[] data = encoding.GetBytes(FormData); //创建HttpWebRequest请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FormURL); ///<!--设定标头开始--> //数据提交方式 request.Method = "POST"; //设定请求连接类型 request.ContentType = "application/x-www-form-urlencoded"; //设定请求内容长度 request.ContentLength = data.Length; //声明了浏览器用于 HTTP 请求的用户代理头的值 request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"; ///<!--设定标头结束--> //返回请求数据流 Stream newStream = request.GetRequestStream(); //向当前流中写入字节序列 newStream.Write(data, 0, data.Length); //关闭流 newStream.Close(); //获取或设置与此请求关联的 cookie。 request.CookieContainer = CookiC; //返回来自 Internet 资源的响应。 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //将返回的cookie添加进cookie容器 CookiC.Add(response.Cookies); //获取流,该流用于读取来自服务器的响应的体。 Stream stream = response.GetResponseStream(); //将流转换成指定编码格式字符串 string WebContent = new StreamReader(stream, System.Text.Encoding.UTF8).ReadToEnd(); //返回获取到的cookie return CookiC; } /// <summary> /// 获取目标网站cookie /// </summary> /// <returns>CookieContainer</returns> public static CookieContainer Get_ssoSinaLogin() { //新建cookie容器 CookieContainer CookiC = new CookieContainer(); //处理表单的绝对URL地址 string FormURL = Url; //表单需要提交的参数,注意改为你已注册的信息。 // "entry=blog®_entry=blog&reference=http://blog.sina.com.cn&door=&safe_login=1&username=" + Username + "&password=" + Password; string FormData = PostDate; //设定编码格式 Encoding encoding = Encoding.UTF8; //将编码转换成字节数组 byte[] data = encoding.GetBytes(FormData); //创建HttpWebRequest请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FormURL); ///<!--设定标头开始--> //数据提交方式 request.Method = "POST"; //设定请求连接类型 request.ContentType = "application/x-www-form-urlencoded"; request.Accept = "text/html, application/xhtml+xml, */*"; request.KeepAlive = true; //设定请求内容长度 request.ContentLength = data.Length; //声明了浏览器用于 HTTP 请求的用户代理头的值 request.UserAgent = " Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; 360SE)"; ///<!--设定标头结束--> //返回请求数据流 Stream newStream = request.GetRequestStream(); //向当前流中写入字节序列 newStream.Write(data, 0, data.Length); //关闭流 newStream.Close(); //获取或设置与此请求关联的 cookie。 request.CookieContainer = CookiC; //返回来自 Internet 资源的响应。 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //将返回的cookie添加进cookie容器 CookiC.Add(response.Cookies); //获取流,该流用于读取来自服务器的响应的体。 Stream stream = response.GetResponseStream(); //将流转换成指定编码格式字符串 string WebContent = new StreamReader(stream, System.Text.Encoding.UTF8).ReadToEnd(); //返回获取到的cookie return CookiC; } /// <summary> /// 遍历CookieContainer提取cookie /// </summary> /// <param name="cc">需要遍历的CookieContainer</param> /// <returns>List<Cookie></returns> public static List<Cookie> GetAllCookies(CookieContainer cc) { List<Cookie> lstCookies = new List<Cookie>(); Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, cc, new object[] { }); foreach (object pathList in table.Values) { SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, pathList, new object[] { }); foreach (CookieCollection colCookies in lstCookieCol.Values) foreach (Cookie c in colCookies) lstCookies.Add(c); } return lstCookies; } } }
INIClass专门ini操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.IO; namespace 沃狐新浪博客推广系统 { class INIClass { public string inipath; [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")] private static extern long WritePrivateProfileSection(string section, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, Byte[] retVal, int size, string filePath); /// <summary> /// 构造方法 /// </summary> /// <param name="INIPath">文件路径</param> public INIClass(string INIPath) { inipath = INIPath; if (inipath == null || inipath.Length < 1 || !ExistINIFile) { File.Create(INIPath).Close(); } } /// <summary> /// 写入INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> /// <param name="Value">值</param> public void IniWriteValue(string Section, string Key, object objValue) { if (objValue == null) objValue = ""; WritePrivateProfileString(Section, Key, objValue.ToString().Trim(), this.inipath); } /// <summary> /// 写入INI文件,没有健只有值 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Value">值</param> public void IniWriteSection(string section, string val) { WritePrivateProfileSection(section, val, this.inipath); } /// <summary> /// 读出INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> public string IniReadValue(string Section, string Key) { StringBuilder temp = new StringBuilder(500); int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.inipath); return temp.ToString(); } /// <summary> /// 读出INI文件数组 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> public byte[] IniReadValueNew(string Section, string Key) { byte[] temp = new byte[500]; int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.inipath); return temp; } /// <summary> /// 验证文件是否存在 /// </summary> /// <returns>布尔值</returns> public bool ExistINIFile { get { return File.Exists(inipath); } } } }
Sendwall新浪发送信息类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Web; using System.IO; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Runtime.InteropServices; namespace 沃狐新浪博客推广系统 { class Sendwall { private string tuid=""; public string Tuid { get { return tuid; } set { tuid = value; } } private string fuid=""; public string Fuid { get { return fuid; } set { fuid = value; } } private string content=""; public string Content { get { return content; } set { content = value; } } CookieContainer cc = new CookieContainer(); public CookieContainer Cc { get { return cc; } set { cc = value; } } private Form1 m_spiderForm; /// <summary> ///蜘蛛报告其结果的对象。 /// </summary>此处最难理解 public Form1 ReportTo { get { return m_spiderForm; } set { m_spiderForm = value; } } //转换成URlEncode public string UrlEncode(string str) { StringBuilder sb = new StringBuilder(); byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str) for (int i = 0; i < byStr.Length; i++) { sb.Append(@"%" + Convert.ToString(byStr[i], 16)); } return (sb.ToString()); } //Form1 frm1 = new Form1(); //发纸条目前无法判断是否发生成功 public void SendwallF() { string FormData = "version=7"; FormData += "&varname=addFriendRequest"; FormData += "&tuid=" + Tuid;//自己 FormData += "&rnd=1342799242793" ; FormData += "&fuid=" + fuid;//对方 FormData += "&content=" + UrlEncode(Content); FormData += "&authcode="; //http://control.blog.sina.com.cn/riaapi/profile/messagesend.php?tuid=2823833972&fuid=2774260630&authcode=3281&content=%E4%BD%A0%E5%A5%BD&varname=addFriendRequest&version=7&rnd=1342799242793 string FormURL = "http://control.blog.sina.com.cn/riaapi/profile/messagesend.php"; //try //{ HttpWebRequest Myrequest = (HttpWebRequest)WebRequest.Create(FormURL + FormData); Myrequest.CookieContainer = Cc; Myrequest.Timeout = 3000; Myrequest.ContentType = "application/x-www-form-urlencoded"; Myrequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; 360SE)"; Myrequest.Accept = "application/javascript, */*;q=0.8"; Myrequest.Headers.Add("Accept-Language", "zh-CN"); // Myrequest.Headers.Add("Accept-Encoding", "gzip, deflate"); // Myrequest.Headers.Add("Cache-Control", "no-cache"); Myrequest.Referer = "http://blog.sina.com.cn/s/profile_" + fuid + ".html"; HttpWebResponse Myresponse = (HttpWebResponse)Myrequest.GetResponse(); cc.Add(Myresponse.Cookies); Stream Mystream = Myresponse.GetResponseStream(); string WebContent = new StreamReader(Mystream, Encoding.GetEncoding("utf-8")).ReadToEnd(); Myresponse.Close(); Mystream.Close(); ReportTo.SetrichTextWithDelegate(ReportTo.richTextBox1, "发送纸条:" + WebContent + "成功"); ReportTo.autoEventStartF.Reset(); //} //catch //{ // frm1.SetrichTextWithDelegate(frm1.richTextBox1, "发送纸条失败"); //} //string WebContent = new StreamReader(Mystream, Encoding.GetEncoding("utf-8")).ReadToEnd(); //Match m = Regex.Match(WebContent, @"{""rows""([^}]*)}", RegexOptions.IgnoreCase); //return true; } //发送留言 public void SendmsgF() { //try //{ //请求参数设定 string FormData = "domain=1"; // FormData += "&uid=" + Tuid; // FormData += "&msg=" + Content; // string FormURL = "http://control.blog.sina.com.cn/blog_rebuild/riaapi/profile/note/notewalladd.php"; // Encoding encoding = Encoding.UTF8; // byte[] data = encoding.GetBytes(FormData); // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FormURL); // request.Method = "POST"; //数据提交方式 request.ContentType = "application/x-www-form-urlencoded"; // request.KeepAlive = true; // request.AllowWriteStreamBuffering = true; // request.Credentials = System.Net.CredentialCache.DefaultCredentials; // request.MaximumResponseHeadersLength = -1; // request.Referer = "http://blog.sina.com.cn/u/" + Tuid; // request.Accept = "text/html, application/xhtml+xml, */*"; // request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"; // request.Headers.Add("Accept-Language", "zh-CN"); // request.Headers.Add("Accept-Encoding", "gzip, deflate"); // request.Headers.Add("Cache-Control", "no-cache"); // request.CookieContainer = Cc; // request.ContentLength = data.Length; //模拟一个UserAgent Stream newStream = request.GetRequestStream(); // newStream.Write(data, 0, data.Length); // newStream.Close(); // HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // request.GetResponse().ResponseUri.ToString(); // Stream stream = response.GetResponseStream(); // string WebContent = new StreamReader(stream, System.Text.Encoding.UTF8).ReadToEnd(); // Match m = Regex.Match(WebContent, @"{""rows""([^}]*)}", RegexOptions.IgnoreCase); // ReportTo.SetrichTextWithDelegate(ReportTo.richTextBox1, "发送留言成功"); ReportTo.autoEventStartF.Reset(); //if (m.Success) //{ // string str = m.Value.Replace("rows", ""); // str = str.Replace(":", ""); // //str = str.Replace("{", ""); // //str = str.Replace("}", ""); // if (str.Length > 3) // { // return true; // } // else // { // return false; // } //} //else //{ // return false; //} //} //catch { return false; } } //加好友 public void SendaddFriendF() { string FormData = "version=7"; FormData += "&varname=addFriendRequest"; FormData += "&tuid=" + Tuid; FormData += "&rnd="; FormData += "&fuid=" + fuid; FormData += "&content=" + UrlEncode(Content); FormData += "&authcode="; //try //{ string FormURL = "http://control.blog.sina.com.cn/riaapi/profile/invitesend.php"; HttpWebRequest Myrequest = (HttpWebRequest)WebRequest.Create(FormURL + FormData); Myrequest.CookieContainer = Cc; HttpWebResponse Myresponse = (HttpWebResponse)Myrequest.GetResponse(); cc.Add(Myresponse.Cookies); Stream Mystream = Myresponse.GetResponseStream(); //return true; //} //catch { return false; } ReportTo.autoEventStartF.Reset(); } //加关注 public void SendattentionF() { Random rd = new Random(); string FormData = "varname=requestId_"+rd.Next().ToString();; FormData += "&uid=" + fuid; FormData += "&aid=" + Tuid; string FormURL = "http://control.blog.sina.com.cn/riaapi/profile/attention_add.php"; //try //{ HttpWebRequest Myrequest = (HttpWebRequest)WebRequest.Create(FormURL + FormData); Myrequest.CookieContainer = Cc; HttpWebResponse Myresponse = (HttpWebResponse)Myrequest.GetResponse(); cc.Add(Myresponse.Cookies); Stream Mystream = Myresponse.GetResponseStream(); //return true; //} //catch { return false; } ReportTo.autoEventStartF.Reset(); } } }
xmlRW专门xml读写类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Windows.Forms; namespace 沃狐新浪博客推广系统 { class xmlRW { public List<xmlUserLogin> Read(string path) { int UserCode = 0; string Auser="",UserPwd = "", UserName = "", Remark = ""; List<xmlUserLogin> list = new List<xmlUserLogin>(); XmlReaderSettings xmlSet = new XmlReaderSettings(); using (XmlReader reader = XmlReader.Create(path, xmlSet)) { while (reader.Read()) //使用XmlReader对象单向高效地读取xml文件 { xmlUserLogin UserLogin = new xmlUserLogin(); if (reader.NodeType == XmlNodeType.Element && "User" == reader.LocalName) { Auser =reader.GetAttribute(0); } if (reader.NodeType == XmlNodeType.Element && "UserCode" == reader.LocalName) { UserCode = Convert.ToInt16(reader.ReadString()); } if (reader.NodeType == XmlNodeType.Element && "UserName" == reader.LocalName) { UserName= reader.ReadString(); } if (reader.NodeType == XmlNodeType.Element && "UserPwd" == reader.LocalName) { UserPwd = reader.ReadString(); } if (reader.NodeType == XmlNodeType.Element && "Remark" == reader.LocalName) { UserLogin.auser = Auser; UserLogin.userCode = UserCode; UserLogin.userName = UserName; UserLogin.userPwd = UserPwd; UserLogin.remark = Remark; list.Add(UserLogin); } } } return list; } //WriteXml 完成对User的修改密码操作 //FileName 当前xml文件的存放位置 //UserCode 欲操作用户的编码 //UserPassword 欲修改用户的密码 public void UpdateNode(string FileName, string OUserName,string NUserName, string NUserPwd,string Remark) { //初始化XML文档操作类 XmlDocument myDoc = new XmlDocument(); //加载XML文件 myDoc.Load(FileName); //搜索指定的节点 System.Xml.XmlNodeList nodes = myDoc.SelectNodes("//User"); if (nodes != null) { foreach (System.Xml.XmlNode xn in nodes) { if (xn.SelectSingleNode("UserName").InnerText == OUserName) { xn.SelectSingleNode("UserName").InnerText = NUserName; xn.SelectSingleNode("UserPwd").InnerText = NUserPwd; xn.SelectSingleNode("Remark").InnerText = Remark; } } } myDoc.Save(FileName); } //DeleteNode 完成对User的添加操作 //FileName 当前xml文件的存放位置 //UserCode 欲添加用户的编码 public void DeleteNode(string FileName, string UserName) { //初始化XML文档操作类 XmlDocument myDoc = new XmlDocument(); //加载XML文件 myDoc.Load(FileName); //搜索指定某列,一般是主键列 XmlNodeList myNode = myDoc.SelectNodes("//UserName"); //判断是否有这个节点 if (!(myNode == null)) { //遍历节点,找到符合条件的元素 foreach (XmlNode xn in myNode) { if (xn.InnerXml == UserName) //删除元素的父节点 xn.ParentNode.ParentNode.RemoveChild(xn.ParentNode); } } //保存 myDoc.Save(FileName); } //WriteXml 完成对User的添加操作 //FileName 当前xml文件的存放位置 //UserCode 欲添加用户的编码 //UserName 欲添加用户的姓名 //UserPassword 欲添加用户的密码 public void AddNode(string FileName, string UserName, string UserPassword, string Remark) { //初始化XML文档操作类 XmlDocument myDoc = new XmlDocument(); //加载XML文件 myDoc.Load(FileName); //添加元素--UserName XmlElement eleUserName = myDoc.CreateElement("UserName"); XmlText textUserName = myDoc.CreateTextNode(UserName); //添加元素--UserPwd XmlElement eleUserPwd = myDoc.CreateElement("UserPwd"); XmlText textUserPwd = myDoc.CreateTextNode(UserPassword); //添加元素--Remark XmlElement eleRemark = myDoc.CreateElement("Remark"); XmlText textRemark = myDoc.CreateTextNode(Remark); //添加节点 User要对应我们xml文件中的节点名字 XmlNode newElem = myDoc.CreateNode(XmlNodeType.Element, "User",""); XmlAttribute newElemAttrib =null; newElemAttrib = myDoc.CreateAttribute("eb"); newElemAttrib.Value = "true"; newElem.Attributes.Append(newElemAttrib); //newElem.Attributes //newElem = myDoc.CreateNode(XmlNodeType.Attribute, "eb", "true"); //在节点中添加元素 newElem.AppendChild(eleUserName); newElem.LastChild.AppendChild(textUserName); newElem.AppendChild(eleUserPwd); newElem.LastChild.AppendChild(textUserPwd); newElem.AppendChild(eleRemark); newElem.LastChild.AppendChild(textRemark); //将节点添加到文档中 XmlElement root = myDoc.DocumentElement; root.AppendChild(newElem); //保存 myDoc.Save(FileName); } } }
xmlUserLogin参数类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 沃狐新浪博客推广系统 { class xmlUserLogin { private string Auser = ""; private int UserCode = 0; private string UserName = ""; private string UserPwd = ""; private string Remark = ""; public string auser { get { return Auser; } set { Auser = value; } } public int userCode { get { return UserCode; } set { UserCode = value; } } public string userPwd { get { return UserPwd; } set { UserPwd = value; } } public string userName { get { return UserName; } set { UserName = value; } } public string remark { get { return Remark; } set { Remark = value; } } } }
c# 读写xml 操作类
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Xml; namespaceKeyCalc { classXmlClass { /// <summary> /// 配置文件路径 /// </summary> privatestringxmlFilePath; /// <summary> /// 皮肤索引 /// </summary> publicstringskinIndex; /// <summary> /// 皮肤路径 /// </summary> publicstringskinPath; publicXmlClass() { //指定XML文件名 xmlFilePath ="config.xml"; //检测XML配置文件是否存在 if(System.IO.File.Exists(xmlFilePath)) return; CreateDefaultXml(); } #region " ReadXML() 读取XML配置文件的参数设置,获取下载的TXT文件路径与上传的数据文件路径" /// <summary> /// 读取XML配置文件的参数设置,获取下载的TXT文件路径与上传的数据文件路径 /// </summary> /// <returns></returns> publicboolReadXML() { try { XmlDocument xmlDoc=newXmlDocument(); //读取XML配置文件 xmlDoc.Load(xmlFilePath); //读取XML文件节点 XmlNode rootNode = xmlDoc.SelectSingleNode("Skin").SelectSingleNode("ParameterSet"); if( rootNode==null) throw(newException("XML配置文件信息异常")); //获取XML文件参数设置下的节点值 XmlElement downfile = (XmlElement)(rootNode.SelectSingleNode("SkinIndex")); if(downfile ==null) throw(newException("XML配置文件信息异常")); skinIndex = downfile.InnerText; XmlElement uploadfile = (XmlElement)(rootNode.SelectSingleNode("SkinPath")); if(uploadfile ==null) throw(newException("XML配置文件信息异常")); skinPath = uploadfile.InnerText; returntrue; } catch(System.Exception e) { throw(e); } } #endregion #region " WriteXML() 写XML配置文件的参数设置,保存下载的TXT文件路径与上传的数据文件路径" /// <summary> /// 写XML配置文件的参数设置,保存下载的TXT文件路径与上传的数据文件路径 /// </summary> /// <returns></returns> publicboolWriteXML() { try { XmlDocument xmlDoc =newXmlDocument(); //读取XML配置文件 xmlDoc.Load(xmlFilePath); //读取XML文件节点 XmlNode rootNode = xmlDoc.SelectSingleNode("Skin").SelectSingleNode("ParameterSet"); if(rootNode ==null) throw(newException("XML配置文件信息异常")); //设置XML文件节点的值 XmlElement skinIndexs = (XmlElement)(rootNode.SelectSingleNode("SkinIndex")); if(skinIndexs ==null) throw(newException("XML配置文件信息异常")); skinIndexs.InnerText = skinIndex; XmlElement skinPaths = (XmlElement)(rootNode.SelectSingleNode("SkinPath")); if(skinPaths ==null) throw(newException("XML配置文件信息异常")); skinPaths.InnerText = skinPath; //保存XML文件 xmlDoc.Save(xmlFilePath); returntrue; } catch(System.Exception ex) { throw(ex); } } #endregion #region " CreateDefaultXml() 创建一个默认的XML配置文件" /// <summary> /// 创建一个默认的XML配置文件 /// </summary> privatevoidCreateDefaultXml() { try { XmlDocument xmlDoc =newXmlDocument(); //创建XML文件描述 XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0","GB2312",null); xmlDoc.AppendChild(dec); //创建根元素 XmlNode root = xmlDoc.CreateNode(XmlNodeType.Element,"Skin",""); xmlDoc.AppendChild(root); //添加参数设置节点 XmlNode parConfig = xmlDoc.CreateNode(XmlNodeType.Element,"ParameterSet",""); root.AppendChild(parConfig); //添加下载到PDA的TXT文件路径 XmlElement skinIndexs = xmlDoc.CreateElement("SkinIndex"); skinIndexs.InnerText =""; parConfig.AppendChild(skinIndexs); //添加PDA数据文件上传到PC端的文件路径 XmlElement skinPaths = xmlDoc.CreateElement("SkinPath"); skinPaths.InnerText =""; parConfig.AppendChild(skinPaths); //保存xml文件 xmlDoc.Save(xmlFilePath); } catch(System.Exception ex) { throw(newException("创建默认XML文件失败"+ex.Message)); } } #endregion } }
C#读写XML文件
**************************** phone.xml **************************** <?xml version="1.0" encoding="utf-8" ?> <PhoneBook> <phone id="001"> <Name>加菲尔德</Name> <Number>5555555</Number> <City>纽约</City> <DateOfBirth>26/10/1978</DateOfBirth> </phone> <phone id="002"> <Name>迈克</Name> <Number>6666666</Number> <City>纽约</City> <DateOfBirth>12/02/1978</DateOfBirth> </phone> </PhoneBook> ********************************************************************* ·使用Document读取及写入XML方法 private void xmlfun() { XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("phone.xml")); XmlElement node = doc.CreateElement("phone"); XmlAttribute atr = doc.CreateAttribute("id"); atr.InnerText = "003"; node.Attributes.Append(atr); XmlNode xnode = (XmlNode)doc.CreateElement("Name"); xnode.InnerText="testName"; node.AppendChild(xnode); xnode = (XmlNode)doc.CreateElement("Number"); xnode.InnerText="119"; node.AppendChild(xnode); xnode = (XmlNode)doc.CreateElement("City"); xnode.InnerText="cs"; node.AppendChild(xnode); xnode = (XmlNode)doc.CreateElement("DateOfBirth"); xnode.InnerText="12/02/1978"; node.AppendChild(xnode); doc.DocumentElement.InsertAfter(node,doc.DocumentElement.LastChild); doc.Save(Server.MapPath("phone1.xml")); //必须要存为不同的文件 } ·使用XmlTextWriter写入XML方法 private void xmlwriter() { XmlTextWriter writer= new XmlTextWriter(Server.MapPath("phone4.xml"),null); writer.Formatting = Formatting.Indented; //缩进格式 writer.Indentation =4; writer.WriteStartDocument(); writer.WriteStartElement("Person"); writer.WriteStartAttribute("ID",null); writer.WriteString("004"); writer.WriteEndAttribute(); writer.WriteStartElement("Name"); writer.WriteString("testWriterName"); writer.WriteEndElement(); writer.WriteStartElement("Number"); writer.WriteString("88888"); writer.WriteEndElement(); writer.WriteStartElement("City"); writer.WriteString("testWriterCity"); writer.WriteEndElement(); writer.Flush(); writer.Close(); } ·使用XmlTextReader读取XML方法 private void xmlread() { XmlTextReader reader = new XmlTextReader(Server.MapPath("phone.xml")); while(reader.Read()) { if(reader.LocalName.Equals("Name") || reader.LocalName.Equals("Number")) { this.Label1.Text += reader.ReadString()+" "; } ·作用SqlCommand.ExecuteXmlReader()取得XML SqlConnecting conn = new SqlConnection(CONNSTR); SqlCommand cmd = new SqlCommand("select fname from employee for xml auto",conn); conn.open(); XmlReader reader = cmd.ExecuteXmlReader(); ...... ################ 所取xml数据格式 ################# <employee fname="aria"/> <employee fname="carlors"/>......
C#读写INI文件
摘自:伊图教程网[www.etoow.com] http://www.etoow.com/html/2007-08/1187271505-1.html 虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中。 INI文件是文本文件,由若干节(section)组成,在每个带括号的标题下面,是若干个关键词(key)及其对应的值(Value) [Section] Key=Value VC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程语言中却没有相应的方法,下面是一个C# ini文件读写类,从网上收集的,很全,就是没有对section的改名功能,高手可以增加一个。 using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Collections; using System.Collections.Specialized; namespace wuyisky{ /**/ /// <summary> /// IniFiles的类 /// </summary> public class IniFiles { public string FileName; //INI文件名 //声明读写INI文件的API函数 [DllImport("kernel32")] private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //类的构造函数,传递INI文件名 public IniFiles(string AFileName) { // 判断文件是否存在 FileInfo fileInfo = new FileInfo(AFileName); //Todo:搞清枚举的用法 if ((!fileInfo.Exists)) { //|| (FileAttributes.Directory in fileInfo.Attributes)) //文件不存在,建立文件 System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default); try { sw.Write("#表格配置档案"); sw.Close(); } catch { throw (new ApplicationException("Ini文件不存在")); } } //必须是完全路径,不能是相对路径 FileName = fileInfo.FullName; } //写INI文件 public void WriteString(string Section, string Ident, string Value) { if (!WritePrivateProfileString(Section, Ident, Value, FileName)) { throw (new ApplicationException("写Ini文件出错")); } } //读取INI文件指定 public string ReadString(string Section, string Ident, string Default) { Byte[] Buffer = new Byte[65535]; int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName); //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文 string s = Encoding.GetEncoding(0).GetString(Buffer); s = s.Substring(0, bufLen); return s.Trim(); } //读整数 public int ReadInteger(string Section, string Ident, int Default) { string intStr = ReadString(Section, Ident, Convert.ToString(Default)); try { return Convert.ToInt32(intStr); } catch (Exception ex) { Console.WriteLine(ex.Message); return Default; } } //写整数 public void WriteInteger(string Section, string Ident, int Value) { WriteString(Section, Ident, Value.ToString()); } //读布尔 public bool ReadBool(string Section, string Ident, bool Default) { try { return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default))); } catch (Exception ex) { Console.WriteLine(ex.Message); return Default; } } //写Bool public void WriteBool(string Section, string Ident, bool Value) { WriteString(Section, Ident, Convert.ToString(Value)); } //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中 public void ReadSection(string Section, StringCollection Idents) { Byte[] Buffer = new Byte[16384]; //Idents.Clear(); int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0), FileName); //对Section进行解析 GetStringsFromBuffer(Buffer, bufLen, Idents); } private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings) { Strings.Clear(); if (bufLen != 0) { int start = 0; for (int i = 0; i < bufLen; i++) { if ((Buffer[i] == 0) && ((i - start) > 0)) { String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start); Strings.Add(s); start = i + 1; } } } } //从Ini文件中,读取所有的Sections的名称 public void ReadSections(StringCollection SectionList) { //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section byte[] Buffer = new byte[65535]; int bufLen = 0; bufLen = GetPrivateProfileString(null, null, null, Buffer, Buffer.GetUpperBound(0), FileName); GetStringsFromBuffer(Buffer, bufLen, SectionList); } //读取指定的Section的所有Value到列表中 public void ReadSectionValues(string Section, NameValueCollection Values) { StringCollection KeyList = new StringCollection(); ReadSection(Section, KeyList); Values.Clear(); foreach (string key in KeyList) { Values.Add(key, ReadString(Section, key, "")); } } ////读取指定的Section的所有Value到列表中, //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString) //{ string sectionValue; // string[] sectionValueSplit; // StringCollection KeyList = new StringCollection(); // ReadSection(Section, KeyList); // Values.Clear(); // foreach (string key in KeyList) // { // sectionValue=ReadString(Section, key, ""); // sectionValueSplit=sectionValue.Split(splitString); // Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString()); // } //} //清除某个Section public void EraseSection(string Section) { // if (!WritePrivateProfileString(Section, null, null, FileName)) { throw (new ApplicationException("无法清除Ini文件中的Section")); } } //删除某个Section下的键 public void DeleteKey(string Section, string Ident) { WritePrivateProfileString(Section, Ident, null, FileName); } //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件 //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。 public void UpdateFile() { WritePrivateProfileString(null, null, null, FileName); } //检查某个Section下的某个键值是否存在 public bool ValueExists(string Section, string Ident) { // StringCollection Idents = new StringCollection(); ReadSection(Section, Idents); return Idents.IndexOf(Ident) > -1; } //确保资源的释放 ~IniFiles() { UpdateFile(); } } }
按行读取txt
(函数名凭记忆写的,可能不准确,但差不多) string = File.ReadAll(filename); 获得整个文本 string[] = File.ReadLines(filename); 获得整个文本,每一行作为一个string,放到数组,应该可以满足你的要求,除非文件特别大。 如果你是因为文件比较大,所以要只读取其中某几行的话,那就只能建立一个file对象,一行行的读,不需要的跳过,直到读到你需要的行,因为“行”这个东西没有办法定位。 如果这个需求量很大,可以考虑自己写一个索引文件,把行号对应的文件偏移量保存起来,下一次就直接seek到对应的位置开始读就可以了。 霸王 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace ReadLine_Demo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string[] stringlines = File.ReadAllLines("d:\a.txt",Encoding.Default); //foreach (string s in stringlines) //{ // this.richTextBox1.Text = s; // MessageBox.Show(s); //} for (int i = 3; i < 12; i++) { if (i < stringlines.Length) { this.richTextBox1.Text = stringlines[i].ToString(); MessageBox.Show(stringlines[i].ToString()); } } } } }
用C#读写ini配置文件
INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若干段落(SECTION)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(KEYWORD)和一个等号,等号右边就是关键字的值(VALUE).例如: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = Value4 C#命名空间中没有直接读写INI的类,当然如果你把INT当成文本文件用System.IO类来读写算我没说. 我现在介绍的是系统处理INI的方法. 虽然C#中没有,但是在"kernel32.dll"这个文件中有Win32的API函数--WritePrivateProfileString()和GetPrivateProfileString() C#声明INI文件的写操作函数WritePrivateProfileString(): [DllImport( "kernel32" )] private static extern long WritePrivateProfileString ( string section ,string key , string val , string filePath ) ; 参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。 C#申明INI文件的读操作函数GetPrivateProfileString():[DllImport("kernel32")] private static extern int GetPrivateProfileString ( string section , string key , string def , StringBuilder retVal , int size , string filePath ) ; 参数说明:section:INI文件中的段落名称;key:INI文件中的关键字;def:无法读取时候时候的缺省数值;retVal:读取数值;size:数值的大小;filePath:INI文件的完整路径和名称。 下面是一个读写INI文件的类: public class INIClass { public string inipath; [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section,string key,string val,string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath); /// <summary> /// 构造方法 /// </summary> /// <param name="INIPath">文件路径</param> public INIClass(string INIPath) { inipath = INIPath; } /// <summary> /// 写入INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> /// <param name="Value">值</param> public void IniWriteValue(string Section,string Key,string Value) { WritePrivateProfileString(Section,Key,Value,this.inipath); } /// <summary> /// 读出INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> public string IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(500); int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath); return temp.ToString(); } /// <summary> /// 验证文件是否存在 /// </summary> /// <returns>布尔值</returns> public bool ExistINIFile() { return File.Exists(inipath); } }