2010-10-26 25 views
0

好吧,我已經讀過.INI文件現在已經過時,.NET Framework創建者希望我們使用.XML文件。但是,我覺得我的一些用戶很難使用.XML文件,所以我想創建一個自定義配置文件。C#從定製文件中讀取

我有一個有3個參數(它實際上是在Scintilla的片斷功能),像這樣的列表字符串:

Snippet.Insert("Name", "Code", 'char'); 

現在我要插入從文件中的所有片段,用戶可以添加自己,包括名字,代碼和性格,但我不知道我會如何做到這一點。也許是這樣的:

[Snippet1] [Snippet1Code] [Snippet1Char] 
[Snippet2] [Snippet2Code] [Snippet2Char] 
[Snippet3] [Snippet3Code] [Snippet3Char] 

但是我不知道我會如何讀取值的方式。如果有人能告訴我一種有效的方式來從文件中讀取片段,我將非常感激。

+5

我想這可能是你的用戶比一個.XML文件更加困難。 – 2010-10-26 13:22:02

+1

你的問題是什麼部分?從文件中讀取?將每行切片爲三個參數?錯誤處理,當用戶只將兩個單詞放在一行? – 2010-10-26 13:24:28

+0

好的,那麼我想我會堅持一個XML文件。我的問題是,我不知道這樣做的「好」方法,但我現在可能只是使用XML文件。 – david 2010-10-26 13:29:08

回答

0

正如其他人的建議,以及類似@ gmcalab的做法,這裏是用Linq To XML一個簡單的例子。

public class Snippet 
{ 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public char Character { get; set; } 
} 


XDocument doc = XDocument.Parse(@"<snippets> 
            <snippet name='snippet1' character='a'> 
            <![CDATA[ 
             // Code goes here 
             ]]> 
            </snippet> 
            <snippet name='snippet2' character='b'> 
            <![CDATA[ 
             // Code goes here 
             ]]> 
            </snippet> 
           </snippets>"); 

List<Snippet> snippetsList = (from snippets in doc.Descendants("snippet") 
          select new Snippet 
          { 
           Name = snippets.Attribute("name").Value, 
           Character = Convert.ToChar(snippets.Attribute("character").Value), 
           Code = snippets.Value 
          }).ToList(); 

snippetsList.ForEach(s => Console.WriteLine(s.Code)); 
0

爲什麼不直接在你提到的xml中設置你的代碼片段然後用XMLTextReader來讀取呢?

漂亮的直線前進......

<snippets> 

    <snippet name="Name1" char="a"> 
    <snippetCode> 
     for(int i = 0; i < 10; i++) { // do work } 
    </snippetCode> 
    </snippet> 

    <snippet name="Name2" char="b"> 
    <snippetCode> 
     foreach(var item in items) { // do work } 
    </snippetCode> 
    </snippet> 

</snippets> 

C#

public class Snippet 
{ 
    public string Name {get;set;} 
    public char Char { get; set;} 
    public string Value { get; set;} 
} 

List<Snippet> Snippets = new List<Snippet>(); 

XmlTextReader reader = new XmlTextReader ("snippets.xml"); 

Snippet snippet = new Snippet(); 

while (reader.Read()) 
{ 
    // Do some work here on the data. 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: 

     if(reader.Name == "snippet"){ 

      while (reader.MoveToNextAttribute()) 
      { 
       if(reader.Name == "Name"){ 
       // get name attribute value 
       snippet.Name = reader.Value; 
       } 
       else if(reader.Name == "Char"){ 
       // get char attribute value 
       snippet.Char = Char.Parse(reader.Value); 
       } 

      } 
     } 

     break; 

     case XmlNodeType.Text: //Display the text in each element. 
      //Here we get the actual snippet code 
      snippet.Value = reader.Value; 

     break; 

     case XmlNodeType. EndElement: 

      if(reader.Name == "snippet"){ 
       // Add snippet to list 
       Snippets.Add(snippet); 
       // Create a new Snippet object 
       snippet = new Snippet(); 
      } 

     break; 

    } 
} 
+0

有關這方面的問題。在處理.XML文件時,我如何將片段添加到列表中? – david 2010-10-26 13:33:53

+0

@david檢查我的更新回答 – Gabe 2010-10-26 14:08:25

+0

嘿,謝謝,雖然我確實弄清楚了自己。不過謝謝你給我的想法,非常感謝它;) – david 2010-10-27 13:59:56

0

如果你喜歡INI文件,我讀過好東西Nini