如何将文件列表<long>?</long>保存到文本文件中

时间:2012-10-05 15:49:02

标签: c#

我这样做是为了创建文件并保存到它:

w = new StreamWriter(_outputDir + "\\" + averagesListTextFileDirectory + "\\" + averagesListTextFile + ".txt", false, Encoding.ASCII);
w.WriteLine("DANNY VIDEO META DATA\r\nFORMAT VERSION:1.00\r\nSOURCE: " + "<" + averagesListTextFile + ">" + "\r\nDATA: ");

for (int i = 0; i < averages.Count; i++)
{
    w.WriteLine(averages[i]);
}
w.WriteLine("DATA");
w.Close();

但是现在我想保存到文件中,每个索引中的List中的值都有另一个值数组。像:

  

[0] 123 33 44 55 66 ...
  [1] 33 44 565 66 ...

在每个索引中有256个值。

我希望文本文件在DATA之后看起来像那样: 下一行将是:

  

第1帧:123 33 44 55 66
  第2帧:33 44 565 66

所以每一行都有256个值。

此格式。

现在文件的格式如下:

  

DANNY VIDEO META DATA
  格式版本:1.00
  消息来源:
  数据:
  15.1199916409607
  13.7612831147295
  13.746730806327
  13.2768227559145

现在我希望在读取List中的值时,格式将如下:

  

DANNY VIDEO META DATA
  格式版本:1.00
  消息来源:
  数据:

     

第1帧:123 33 44 55 66
  第2帧:33 44 565 66

问题是如何阅读列表,每个索引包含256个值,如何将其写入文本文件?

这就是我试图这样做的方式:

private void WriteHistograms() // For automatic mode only for now
        {
            HistogramsFile = new StreamWriter(_outputDir + "\\" + averagesListTextFileDirectory + "\\"  + "Histograms.txt", false, Encoding.ASCII);
            HistogramsFile.WriteLine("DANNY VIDEO META DATA\r\nFORMAT VERSION:1.00\r\nSOURCE: " + "<" + averagesListTextFile + ">" + "\r\nDATA: ");
            foreach (long[] array in Histograms)
            {
                foreach (long value in array)
                {
                  frameNumber++;
                  HistogramsFile.WriteLine("Frame Number " + frameNumber + " : " + value);                      

                }
            }
            HistogramsFile.WriteLine("DATA");
            HistogramsFile.Close();

结果是25MB的文件大小!以下是文本文件格式的示例:

DANNY VIDEO META DATA
FORMAT VERSION:1.00
SOURCE: <MVI_2483.AVI_Automatic>
DATA: 
Frame Number 1 : 5977
Frame Number 2 : 40775
Frame Number 3 : 174395
Frame Number 4 : 305855
Frame Number 5 : 265805
Frame Number 6 : 212232
Frame Number 7 : 153333
Frame Number 8 : 99743
Frame Number 9 : 62334
Frame Number 10 : 41018
Frame Number 11 : 27381
Frame Number 12 : 21403
Frame Number 13 : 18324

最后我看到帧号:

Frame Number 973822 : 666
Frame Number 973823 : 1118
Frame Number 973824 : 0

现在确定为什么最后一个是0以及为什么973824帧,而实际上只有大约3800帧。

那么文件大小是逻辑25MB?格式我希望它是:

第1帧:33 44 55 66 77 88 ......(此行中有256个值) 帧号2:22 33 12 3 44 55 .......(此行中有256个值)

等等。

列表直方图是每个索引中的类型,每个索引中有256个索引:

[0]有:[1] 23 [2] 22 [3] 44等 [1]有:[1] 12 [2] 13 [3] 21等等

那么什么错?

1 个答案:

答案 0 :(得分:1)

您需要在原始循环中使用嵌套for循环:

foreach(long[] array in averages)
{

     foreach(long value in array)
     {
          w.WriteLine(value);
     }
}

这将允许您遍历数组列表。通常,对于大多数二维数据结构,您将遵循此类型的循环。

编辑:如果要在单独的行上打印出每个数组,则需要按如下方式修改循环:

int frameNumber = 1;
foreach(long[] array in averages)
{
     w.WriteLine("Frame Number " + frameNumber + " : ");
     frameNumber++;

     foreach(long value in array)
     {
          w.Write(value).Write(' ');
     }
}

这将产生以下结果:

Frame Number 1 : 10 15235 198 65439 24098...
Frame Number 2 : 10232 135 45619 895649 4598...
...
Frame Number N : 987 651 654 968498 21654...