Как записать список целых в файл для загрузки в другое время? - PullRequest
0 голосов
/ 14 февраля 2020

Я новичок в c#, так что это может быть немного глупо.

Я хочу записать список целых или массив целых чисел в файл.

Если я использую C, я могу записать следующее:

Для сохранения

int a[1024] = {0,};
fwrite(a,sizeof(int),1024,fp);

Для загрузки

int *a = null;
fseek(fp, 0, SEEK_END);

int ArraySize = ftell(fp)/sizeof(int);

a = (int*)malloc(sizeof(int)*ArraySize);
fread(a,sizeof(int),1024,fp);

Есть ли хороший способ сохранения и загрузки?

Ниже приведен мой код c#.

Сохранение

List<List<int>> a = new List<List<int>>();
...
...
StreamWriter wt = new StreamWriter(path);
foreach(List<int> i in a)
{
    wt.WriteLine(string.Join(",",i));
}

Загрузка

List<List<int>> a = new List<List<int>>();
...
...
StreamReader rd = new StreamReader(path);
string s = "";
while((s=rd.ReadLine())!=null)
{
    a.add(s.split(',').select(int.Parse).toList());
}

Если у вас, ребята, есть идеи, помогите мне.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Вы можете использовать File.WriteAllLines и File.ReadAllLines. Например,

Запись в файл

File.WriteAllLines(filePath,list.Select(x=>x.ToString()));

Чтение из файла

var readList = File.ReadAllLines(filePath).Select(x=>Convert.ToInt32(x)).ToList();

Enumerable.Select проецирует каждый элемент последовательности ( в этом случае все строки считываются из текстового файла) в целые числа с использованием метода `Convert.ToInt32 '.

1 голос
/ 14 февраля 2020

Вы можете использовать методы файла WriteAllLines и ReadLines, а также некоторые linq

// writing
var a = new List<List<int>>();
File.WriteAllLines("filename", a.Select(x => string.Join(",", x)));

// reading , you will need to read each line, split, then parse
var result = File.ReadLines("filename")
                 .Select(x => x.Split(',').Select(int.Parse).ToList())
                 .ToList();

, если вы хотите сделать это без анализа и разбивая (более эффективно), вы можете сохранить список в двоичном файле

var list = new List<List<int>>();

using (var writer = new BinaryWriter(new FileStream("FileName", FileMode.Create)))
{
   foreach (var inner in list)
   {
      writer.Write(inner.Count);
      foreach (var item in inner)
         writer.Write(item);
   }
}

var results = new List<List<int>>();

using (var reader = new BinaryReader(new FileStream("FileName", FileMode.Open)))
{
   while(reader.BaseStream.Position < reader.BaseStream.Length)
   {
      var size = reader.ReadInt32();

      var inner = new List<int>(size);
      results.Add(inner);
      for (int i = 0; i < size; i++)
         inner.Add(reader.ReadInt32());
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...