放在 blogspot.com 的東西,為什麼 google chrome 會不正常,跟別人不一樣?!
2010年11月19日 星期五
[c#]設定檔 config 的使用(3)
前次提到使用 System.Configuration.ConfigurationManager 這個神奇工具,
是非常方便,
但是我想要指定設定檔名字,怎麼辦?
那就來抄 App.config 吧,希望這個沒有專利啊,呵呵。
public class readConfig{
string _configFileName = "";
public readConfig(string configFileName)
{
_configFileName = configFileName;
}
public string ConfigValue(string section, string key)
{
string r = "";
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
try
{
xd.Load(_configFileName);
System.Xml.XmlNode xn = xd.SelectSingleNode("/configuration/" + section + "/add[@key='" + key+ "']/@value");
if (xn == null)
{
r = "";
}
else
{
r = xn.InnerText;
}
}
finally
{
}
return r;
}
}
使用方法如下
readConfig x = new readConfig(pathToConfig);
string y = x.ConfigValue("appSettings", "source1");
就這樣。
如果 key 不存在的話,會傳回長度為零的字串。這是我自己比較喜歡的結果。
[c#]設定檔 config 的使用(2)
前一篇說到使用 dataset 當做工具來讀取設定。
另外一個是開發的時候,在專案中加入 App.config 這個檔案。
我先用 winform 專案來解釋。
要記得將 System.configuration 加入專案參考中。
如此就會有神奇工具可以用,就是
System.Configuration.ConfigurationManager
只要將 App.config 裡面內容填入
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="source1" value="appsetting.release.config" />
<add key="source2" value="appsetting.dev.config" />
<add key="target" value="appsetting.config" />
</appSettings>
</configuration>
以下神奇工具的使用就會得到上面紅色的字!
string f1 = System.Configuration.ConfigurationManager.AppSettings["source1"];
也就是 /configuration/appSettings/add 元素的 key / value 在操作。
如果 key 不存在的話,會回傳 null 。
當你建置這個專案,執行檔執行的時候,並不是把 App.config 這個檔案當做設定檔來讀,而是「執行檔名稱.exe.config」。例如某個執行檔名字是「MyFirstExe.exe」,設定檔名字就是「MyFirstExe.exe.config」。
所以你的執行檔在發佈的時候,記得要帶著「執行檔名稱.exe.config」一起發佈。
還有類似的神奇工具在其他種類的專案中,下次再研究。
2010年11月14日 星期日
[c#]設定檔 config 的使用 (1)
從 vb6 時代,用慣了 ini,就算換到了點網時代,也還是用 ini。
不想換的原因也很簡單,就是懶得再去搞定那些已經寫好的設定檔讀取的舊程式碼。
其實,現在的點網好心的給我們一些功能,所以可以輕鬆使用 xml 當做設定檔。現在有兩招,第一招是同事發現的:
(1)用 dataset 當做操作者:
首先把設定檔寫好如下
<Setting>
<SetPath>
<Test1>C:\Test</Test1>
<Test2>D:\Test</Test2>
<Test3>E:\Test</Test3>
<Test4>F:\Test</Test4>
</SetPath>
</Setting>
取值的 function 如下,可以拿到 Test3 的值 E:\Test
DataSet ds = new DataSet();
ds.ReadXml(pathToXmlSetting);
if (ds.Tables["SetPath"].Rows.Count > 0)
return ds.Tables["SetPath"].Rows[0]["Test3"].ToString().Trim();
else
return "";
會這樣寫是要避開設定檔沒寫好的防呆措施。
2010年11月5日 星期五
[google]google I/O
以前只看名字,以為這是 google 對於 I/O 的一些軟體。
我大錯特錯。
原來這是 google 舉辦的 conference 的名字。
在這個 conference 裡,介紹 google 的成果,推廣他們開發工具,推廣他們的應用產品,推廣他們對於網路的理念。
我仍然很佩服他們能把商業做得這麼不露痕跡。
尤其我經歷過搜尋網站把網站排名秤斤論兩的販賣的年代,我因為它總是給我大家所認為對的資料,而不是花錢買曝光率的網站而一直用到現在。
他們維持著給與使用者想要的資料的原則,並且努力著提供好用的平台,降低門檻讓每個人都能成為內容的提供者,而不惜花大錢投資研究或買下其他公司。
是的,當然有可能這樣的公司會做壞事。希望他們能堅持下去。
離題了。
這個 conference 的影片我正在消化中,最讓我印象深刻的是 2009 送與會者手機,2010 也送與會者手機。好想參加啊,不曉得要不要錢?
2010年11月4日 星期四
[aspnet]按下按鈕後,出現下載視窗
這是常常看到的功能,但是我就是花了一、兩個小時在試它。
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=newfile.xml");
Response.TransmitFile(Server.MapPath(@"App_Data\" + "newfile.xml"));
Response.End();
}
以上的程式是把網站中,存在的檔案送出去。
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=newfile.xml");
Response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes("text test"));
Response.End();
}
而以上的程式是把網站中,已知的字串用UTF-8編碼當做XML檔案送出去。
兩個程式裡,只要走到Response.End();就離開了。在後面寫什麼程式都執行不到。