Простой способ чтения и записи текстового файла значения имени - PullRequest
4 голосов
/ 23 сентября 2010

У меня есть класс с большим количеством полей;

public class CrowdedHouse
{
  public int     value1;
  public float   value2;
  public Guid    value3;
  public string  Value4;

  // some more fields below
}

Мой класс должен быть (де) сериализирован в простой текстовый файл Windows в следующем формате

NAME1=VALUE1
NAME2=VALUE2

Что является наиболееудобный способ сделать это в .NET?Это текстовый файл, и все значения должны быть сначала преобразованы в строку.Давайте предположим, что я уже преобразовал все данные в строки.

ОБНОВЛЕНИЕ Одной из опций будет pinvoke WritePrivateProfileString / WritePrivateProfileString, но они используют обязательное поле «[Section]», которое мне не нужно использовать.

Ответы [ 3 ]

11 голосов
/ 23 сентября 2010

РЕДАКТИРОВАТЬ: Если вы уже преобразовали каждое значение данных в строки, просто используйте метод ниже для его сериализации после создания Dictionary из этих значений:

var dict = new Dictionary<string, string>
{
    { "value1", "value1value" },
    { "value2", "value2value" },
    // etc
}

илииспользуйте dict.Add(string key, string value).


Чтобы прочитать данные, просто разбейте каждую строку вокруг = и сохраните результаты как Dictionary<string, string>:

string[] lines = File.ReadAllLines("file.ext");
var dict = lines.Select(l => l.Split('=')).ToDictionary(a => a[0], a => a[1]);

Чтобы преобразоватьвведите в файл словарь:

string[] lines = dict.Select(kvp => kvp.Key + "=" + kvp.Value).ToArray();
File.WriteAllLines(lines);

Обратите внимание, что ваши NAME s и VALUE s не могут содержать =.

4 голосов
/ 27 сентября 2012

Незначительное улучшение ответа Captain Comic:

Для включения = в значениях: (будет разделено только один раз)

var dict = lines.Select(l => l.Split(new[]{'='},2)).ToDictionary(a => a[0], a => a[1]); 
4 голосов
/ 23 сентября 2010

Писать легко:

// untested
using (var file = System.IO.File.CreateText("data.txt"))
{
   foreach(var item in data)
      file.WriteLine("{0}={1}", item.Key, item.Value);
}

И для чтения обратно:

// untested
using (var file = System.IO.File.OpenText("data.txt"))
{
   string line;
   while ((file.ReadLine()) != null)
   {
       string[] parts = line.Split('=');
       string key = parts[0];
       string value = parts[1];
       // use it
   }
}

Но, вероятно, лучший ответ: используйте XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...