Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将c#代码更改为从文件读取?_C#_.net_File Io - Fatal编程技术网

如何将c#代码更改为从文件读取?

如何将c#代码更改为从文件读取?,c#,.net,file-io,C#,.net,File Io,我有这样的代码 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 bb

我有这样的代码

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中重新开始读取

实际上还有很多,但我希望有人能给我一些建议,让我开始从循环中的文件中读取数据,直到我可以重新启动循环为止


非常感谢。

在C#/.NET中读取文件非常容易


如果你去寻找的话,有很多这样的代码示例。

在C#/.NET中读取文件非常容易

如果您查找这些代码,就会发现有很多这样的代码示例。

序列化

[DataContract]
public sealed class Test
{
    public DetailCollection Details {get;set;}
}
[CollectionDataContract]
public sealed class DetailCollection : Collection<string> {}
这太糟糕了,而且是马车。还有Xaml序列化:

//连载 var xaml=XamlServices.Save(测试); //反序列化 var test2=(Test)XamlServices.Load(XmlReader.Create(newstringreader(xaml))

以及DataContractSerializer/NetDataContractSerializer(两种类型的模式相同,一种是以.NET为中心的,另一种不是)

出于若干原因,我更喜欢后两者。在您的情况下,我建议使用xaml序列化,就好像您将构建设置为页面,并正确使用名称空间(XMLN)(打开序列化文件时您会看到它们已定义)一样,在编辑文件时,您将在VS中获得intellisense。有帮助

请注意,所有代码都是类似c的伪代码,可能需要调试/语法编辑才能正常工作。

序列化

[DataContract]
public sealed class Test
{
    public DetailCollection Details {get;set;}
}
[CollectionDataContract]
public sealed class DetailCollection : Collection<string> {}
这太糟糕了,而且是马车。还有Xaml序列化:

//连载 var xaml=XamlServices.Save(测试); //反序列化 var test2=(Test)XamlServices.Load(XmlReader.Create(newstringreader(xaml))

以及DataContractSerializer/NetDataContractSerializer(两种类型的模式相同,一种是以.NET为中心的,另一种不是)

出于若干原因,我更喜欢后两者。在您的情况下,我建议使用xaml序列化,就好像您将构建设置为页面,并正确使用名称空间(XMLN)(打开序列化文件时您会看到它们已定义)一样,在编辑文件时,您将在VS中获得intellisense。有帮助


请注意,所有代码都是类似c的伪代码,可能需要调试/语法编辑才能正常工作。

您尝试了什么?您是否搜索过从C#中的文件中读取数据?您的意思是,您想要一个包含所有测试的文件,还是每个测试一个文件?您尝试过什么?你在C#中搜索过读取文件吗?你是说你想要一个包含所有测试的文件还是每个测试一个文件?必须使用块将这种东西包装在
中,以确保它正确关闭,比如:
使用(var file=new StreamReader(fileName)){/*执行所有文件读取工作*/}
@Joe-同意,我想知道这一点,但我认为,如果有人问应该如何读取文件,可能需要一个更简单的示例,而不是分层“使用”的良好实践。但是你是对的-所以我编辑了答案必须使用
块将这类东西包装在一个
中,以确保它正确关闭,比如:
使用(var file=new StreamReader(fileName)){/*执行所有文件读取工作*/}
@Joe-同意,我对此感到好奇,但是,有人问应该如何读取文件,他们可能想要一个更简单的示例,而不是分层“使用”的良好实践。但是你是对的,所以我编辑了答案
// 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);
// 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);