将数据表保存到文本文件的最短方法
Posted
技术标签:
【中文标题】将数据表保存到文本文件的最短方法【英文标题】:Shortest way to save DataTable to Textfile 【发布时间】:2015-08-15 10:53:35 【问题描述】:我刚刚找到了一些答案,但发现它们都非常长且迭代次数很多,所以我想出了自己的解决方案:
将表格转换为字符串:
string myTableAsString =
String.Join(Environment.NewLine, myDataTable.Rows.Cast<DataRow>().
Select(r => r.ItemArray).ToArray().
Select(x => String.Join("\t", x.Cast<string>())));
然后简单地将字符串保存到文本文件中,例如:
StreamWriter myFile = new StreamWriter("fileName.txt");
myFile.WriteLine(myFile);
myFile.Close();
有没有更短/更好的方法?
【问题讨论】:
你想要多短? Oneliner 用于保存到文件File.WriteAllText(location, content);
。还有预定义的DataTable方法WriteXml(location)将数据表的内容保存到文件中。
如果你有工作代码,它不属于这个站点。该站点用于修复损坏的代码。
如果您可以使用 xml,那么您可能有兴趣将 DataTable
添加到 DataSet
并在其上调用 WriteXml
。
我只是想知道我是否只是在重新发明***。如果有一种我无法找到的非常简单和简短的方法,如果有人可以让我知道,我将不胜感激。重要的部分是关于将表格转换为字符串,但感谢提示在一行中写入文件,我不知道。
【参考方案1】:
除非您使用架构保存它,否则您会收到错误:
myDataTable.WriteXml("myXmlPath.xml", XmlWriteMode.WriteSchema);
myDatatable.ReadXml("myXmlPath.xml");
这里有更多关于使用架构保存/加载的信息: DataTable does not support schema inference from Xml.?
【讨论】:
【参考方案2】:您将DataTable
命名为myDataTable,您可以将其添加到DataSet
:
var dataSet = new DataSet();
dataSet.AddTable(myDataTable);
// Write dataset to xml file or stream
dataSet.WriteXml("filename.xml");
您还可以从 xml 文件或流中读取:
dataSet.ReadXml("filename.xml");
【讨论】:
为什么需要创建DataSet?你不能像其他人建议的那样做myDataTable.WriteXml("filename.xml")
吗?
出于某种原因,我在考虑多个表。如果您只需要编写一张表,那么您当然可以使用DataTable.WriteXml
。
仅供参考:在 .NET Framework 4.6.2 中,System.Data.DataSet
上没有名为 AddTable
的方法,我在 DataSet.Tables
上使用了 Add
方法。见.NET Framework 4.6.2 Documentation for DataSet 和.NET Framework 4.6.2 Documentation for DataTableCollection.Add【参考方案3】:
如果您将 XML 视为文本,您可以这样做:myDatatable.WriteXml("mydata.xml")
和 myDatatable.ReadXml("mydata.xml")
【讨论】:
是的,这看起来也简单多了。【参考方案4】:@Leonardo 抱歉,但我无法发表评论,所以我发帖。
有时您可以询问数据集,然后使用它。像这样:
foreach (DataRow row in ds.Tables[0].Rows)
foreach (object item in row.ItemArray)
myStreamWriter.Write((string)item + "\t");
myStreamWriter.WriteLine();
这是另一种方式,但我不知道哪种方式会给你一个更好的指标。
【讨论】:
以上是关于将数据表保存到文本文件的最短方法的主要内容,如果未能解决你的问题,请参考以下文章