10
public void GenerateDetailFile()
{
  if (!Directory.Exists(AppVars.IntegrationFilesLocation))
  {
    Directory.CreateDirectory(AppVars.IntegrationFilesLocation);
  }

  DateTime DateTime = DateTime.Now;
  using (StreamWriter sw = File.CreateText(AppVars.IntegrationFilesLocation +
                                DateTime.ToString(DateFormat) + " Detail.txt"))
  {
    DataTable table = Database.GetDetailTXTFileData();

    foreach (DataRow row in table.Rows)
    {
      sw.WriteLine(row);
    }
  }
}

不知道我在这里缺少什么,但我认为它可能是列名,我不确定如何设置它。

这工作正常,除了,当它写入文本文件时,它是这样写的:

System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow

谁能帮我一把?

4

6 回答 6

19

当您尝试打印出DataRow类似的内容时,它正在调用Object.ToString(),它只是打印出类型的名称。你想要做的是这样的:

sw.WriteLine(String.Join(",", row.ItemArray));

这将打印一个逗号分隔的列表,其中包含DataRow.

于 2012-07-31T22:25:21.950 回答
9

就像是:

sw.WriteLine(row["columnname"].ToString());

会更合适。

于 2012-07-31T22:19:21.263 回答
5

下面的代码将让您编写文本文件,每列用“|”分隔

    foreach (DataRow row in dt.Rows)
      {  
         object[] array = row.ItemArray;
         for (int i = 0; i < array.Length - 1; i++)
         {
           swExtLogFile.Write(array[i].ToString() + " | ");
         }
          swExtLogFile.WriteLine(array[array.Length - 1].ToString());             
     }

参考链接

于 2015-08-12T09:16:53.680 回答
4

DataRow 没有“自然”的字符串表示形式。您需要以所需的任何格式将其写出,即以逗号分隔的值列表等。您可以枚举列并打印它们的值,例如:

foreach (DataRow row in table.Rows)
{
    bool firstCol = true;
    foreach (DataColumn col in table.Columns)
    {
        if (!firstCol) sw.Write(", ");
        sw.Write(row[col].ToString());
        firstCol = false;
    }
    sw.WriteLine();
}
于 2012-07-31T22:18:39.700 回答
1

您需要从每个 DataRow 中写入列。目前您正在编写 DataRow 对象,即 dataRow.ToString() 因此您"System.Data.DataRow"在文件中获得了 dataRow 的字符串名称

foreach(DataRow row in table.Rows)
{
 foreach(DataColumn column in table.Columns)
 {
  sw.WriteLine(row[column]);
 }
}
于 2012-07-31T22:19:26.997 回答
1

试试这个:

将 DataTable 行写入特定目录中的文本文件

            var dir = @"D:\New folder\log";  // folder location

            if (!Directory.Exists(dir))  // if it doesn't exist, create
                Directory.CreateDirectory(dir);

            foreach (DataRow row in dt.Rows)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    result.Append(row[i].ToString());
                    result.Append(i == dt.Columns.Count - 1 ? "\n" : ",");
                }
                result.AppendLine();
            }
            string path = System.IO.Path.Combine(dir, "item.txt");
            StreamWriter objWriter = new StreamWriter(path, false);
            objWriter.WriteLine(result.ToString());
            objWriter.Close();
于 2020-01-07T11:29:21.170 回答