// --------------------------- // set default values for site // --------------------------- string Host = null; int Port = 21; string Login = ""; string Password = ""; string UploadDir = null; string NoModifyDir = "/"; int Timeout = 10000; bool Passive = true; string Proxy = null; bool ProxyEnabled = false; int ProxyPort = 3128; string ProxyUser = null; string ProxyPassword = null; int ProxyType = 1; const string CONFIGFILE = "config.xml"; // xml file consisting of settings /// <summary> /// 从配置文件加载站点属性值 /// </summary> private void LoadConfig() { // ---------------- // read config file // ---------------- DataSet ds = new DataSet(); try { if (!File.Exists(CONFIGFILE)) return; ds.ReadXml(CONFIGFILE); NoModifyDir = "/"; Timeout = 10000; Proxy = null; foreach (DataRow dr in ds.Tables[0].Rows) { string item = dr["value"].ToString(); switch (dr["name"].ToString().ToLower()) { case "host": Host = item; break; case "login": Login = item; break; case "port": { try { Port = Int32.Parse(item); } catch { Port = 21; // default } break; } case "password": Password = EncodePassword(item); break; case "passive": Passive = (item.ToLower() == "false" ? false : true); break; case "proxy": Proxy = item; break; case "proxylogin": ProxyUser = item; break; case "proxypassword": ProxyPassword = EncodePassword(item); break; case "proxyenabled": ProxyEnabled = (item.ToLower() == "false" ? false : true); break; case "proxyport": { try { ProxyPort = Int32.Parse(item); } catch { ProxyPort = 3128; // default } break; } case "proxytype": { try { ProxyType = Int32.Parse(item); } catch { ProxyType = 1; // default } break; } } } } catch { Console.WriteLine("* config file read error"); } } /// <summary> /// encoded/normal texts transfer to normal/encoded ones /// </summary> /// <param name="password">encoded/normal text</param> /// <returns></returns> private string EncodePassword(string password) { const byte MAGICNUMBER = 42; // XOR value for password encoded/decode process string encodedString = ""; foreach (char signs in password) { char sign = (char)(signs ^ MAGICNUMBER); encodedString += sign.ToString(); } return encodedString; } /// <summary> /// 保存站点值到配置文件 /// </summary> private void SaveConfig() { DataSet ds = new DataSet("configuration"); try { ds.Tables.Add("key"); ds.Tables[0].Columns.Add("name"); ds.Tables[0].Columns.Add("value"); DataRow[] dr = new DataRow[11]; dr[0] = ds.Tables[0].NewRow(); dr[1] = ds.Tables[0].NewRow(); dr[2] = ds.Tables[0].NewRow(); dr[3] = ds.Tables[0].NewRow(); dr[4] = ds.Tables[0].NewRow(); dr[5] = ds.Tables[0].NewRow(); dr[6] = ds.Tables[0].NewRow(); dr[7] = ds.Tables[0].NewRow(); dr[8] = ds.Tables[0].NewRow(); dr[9] = ds.Tables[0].NewRow(); dr[10] = ds.Tables[0].NewRow(); ds.Tables[0].Clear(); dr[0]["name"] = "host"; dr[0]["value"] = Host; dr[1]["name"] = "login"; dr[1]["value"] = Login; dr[2]["name"] = "port"; dr[2]["value"] = Port; dr[3]["name"] = "password"; dr[3]["value"] = EncodePassword(Password); dr[4]["name"] = "passive"; dr[4]["value"] = Passive; dr[5]["name"] = "proxyenabled"; dr[5]["value"] = ProxyEnabled; dr[6]["name"] = "proxy"; dr[6]["value"] = Proxy; dr[7]["name"] = "proxyport"; dr[7]["value"] = ProxyPort; dr[8]["name"] = "proxytype"; dr[8]["value"] = ProxyType; dr[9]["name"] = "proxylogin"; dr[9]["value"] = ProxyUser; dr[10]["name"] = "proxypassword"; dr[10]["value"] = ProxyPassword; ds.Tables[0].Rows.Add(dr[0]); ds.Tables[0].Rows.Add(dr[1]); ds.Tables[0].Rows.Add(dr[2]); ds.Tables[0].Rows.Add(dr[3]); ds.Tables[0].Rows.Add(dr[4]); ds.Tables[0].Rows.Add(dr[5]); ds.Tables[0].Rows.Add(dr[6]); ds.Tables[0].Rows.Add(dr[7]); ds.Tables[0].Rows.Add(dr[8]); ds.Tables[0].Rows.Add(dr[9]); ds.Tables[0].Rows.Add(dr[10]); ds.WriteXml(CONFIGFILE, XmlWriteMode.IgnoreSchema); } catch { Console.WriteLine("* config file not saved"); } }