簡體   English   中英

如何更改我的C#代碼以從文件讀取?

[英]How can I change my c# code to read from a file?

我有這樣的代碼。

td = new Test.Detail();
t = td.Details;          // This is a list of strings
t.Add("aaa");
t.Add("bbb");
t.Add("ccc");

它是VS2010中的源文件,當前用於加載一些靜態數據。 現在數據量已經增加,因此我們正在考慮將數據保存在txt文件中。 這樣就可以輕松對其進行修改。 我需要某種方式將數據從我的文本文件中讀取到程序中,如下所示:

> test1
aaa
bbb
ccc

> test2
ddd
eee
fff

該代碼需要將test1讀入一個變量,讀入並將以下行添加到nD直到空行。 在這一點上,它需要采取一些措施。 然后它需要重新開始讀取test2。

其實還有很多,但是我希望有人能給我一些建議,讓我開始從循環中讀取文件中的數據,直到可以重新開始循環為止。

非常感謝你。

序列化。

[DataContract]
public sealed class Test
{
    public DetailCollection Details {get;set;}
}
[CollectionDataContract]
public sealed class DetailCollection : Collection<string> {}

使用這兩個類,您可以以多種方式序列化它們,編輯生成的xml文件,並根據需要立即反序列化它們。

有經典的XML序列化

// serialize
var ser= new XmlSerializer(typeof(Test));
using(var fs= new StreamWriter(@"C:\testdata.xml"))
    ser.Serialize(fs, TestObj);
// deserialize
using(var fs= new FileStream(@"C:\testdata.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
    Test test = (Test)ser.Deserialize(fs);

太爛了,是越野車。 還有Xaml序列化:

//序列化var xaml = XamlServices.Save(test); //反序列化var test2 =(Test)XamlServices.Load(XmlReader.Create(new StringReader(xaml))));

和DataContractSerializer / NetDataContractSerializer(兩種類型的模式相同,一種以.NET為中心,另一種則不是)

// serialize
var ser= new NetDataContractSerializer();
using(var fs= new StreamWriter(@"C:\testdata.xml"))
    ser.Serialize(fs, TestObj);
// deserialize
using(var fs= new FileStream(@"C:\testdata.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
using (var xmlReader = new XmlTextReader(fs))
    Test test = (Test)ser.ReadObject(xmlReader);

由於某些原因,我更喜歡后兩者。 在您的情況下,我建議您進行xaml序列化,就像您將構建設置為Page ,並正確使用名稱空間(xmlns)(打開序列化文件時將看到它們定義的一樣),您將在VS中獲得智能感知編輯文件。 很有幫助

請注意,所有代碼都是類似c#的偽代碼,可能需要調試/語法編輯才能正確運行。

在C#/。NET中讀取文件非常容易

System.IO.StreamReader file;
using(file = new StreamReader(@"c:\myfile.txt"))
{
    while((line = file.ReadLine()) != null)
    {
     // do something with the line
    }
}

如果您需要查找,則有大量此類代碼示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM