Работа с файлами - PullRequest
       29

Работа с файлами

1 голос
/ 12 ноября 2009

Мне нужно создать приложение, которое будет читать файл, который будет выглядеть так:

Font = "Courier New"
Size = "10"
Style = "Bold"

Как вы можете видеть, я собираюсь использовать это для установки некоторых свойств TextBox, но я собираюсь сохранить каждую вещь, которая находится внутри этих кавычек, и сохранить их в некоторых переменных (textFont, textSize , textStyle).

Я думаю, что могу использовать этот синтаксис, чтобы открыть поток с файлом:

StreamReader reader = new StreamReader("confs.txt");

Вопросы:

  • Когда объявлен StreamReader, он будет читать файл в каталоге приложения? (Только для подтверждения)
  • Как я могу читать только то, что находится внутри кавычек, и хранить каждое в строке?

Как мне кажется, файловый ввод / вывод одинаков в Windows Mobile и Windows. С наилучшими пожеланиями

Ответы [ 3 ]

3 голосов
/ 12 ноября 2009

Как насчет этого:

foreach(string s in FileLines) {
  string[] data = s.Split(new[] { '=' });
  // property is in data[0]
  // value is in data[1]
}

То, что вы создали, это простой файл CSV

Где под CSV я подразумеваю значение, разделенное символами ...

Обновление

Хорошо, похоже, что вы пытаетесь точно копировать вместо понимания алгоритма, поэтому я создам новый здесь

StreamReader reader = new StreamReader("confs.txt");
while(reader.peek >= 0) {
   string l = reader.ReadLine();
   string[] data = l.Split(new[] { '=' });
   // property is in data[0]
   // value is in data[1]
}
reader.Close();
reader.Dispose();
2 голосов
/ 12 ноября 2009

1: пока вы не измените текущий каталог, да. Есть еще тщательный способ получить каталог приложения, хотя

2: любое количество способов разбора такой строки; string.Split, Regex и т.д .; исключительно в качестве иллюстрации, я (а) буду использовать DbConnectionStringBuilder:

using (StreamReader reader = File.OpenText("data.txt")) {
    string line;
    DbConnectionStringBuilder db = new DbConnectionStringBuilder();
    while ((line = reader.ReadLine()) != null) {
        db.ConnectionString = line;
        foreach (string key in db.Keys) {
            Console.WriteLine(key);
            Console.WriteLine(db[key]);
        }
    }
}

edit DbConnectionStringBuilder может не существовать в windows-mobile; возможно просто Split на = или используйте Regex; это сводится к точному формату.

2 голосов
/ 12 ноября 2009

Лучше указать полный путь или использовать следующий синтаксис:

System.IO.Path.Combine((new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath, "confs.txt");

Я думаю, что для его анализа вам будет проще сохранить файл в формате XML и загрузить его в XmlDocument. Или, что еще лучше, откажитесь от этой идеи и сохраните информацию о файле в файле app.config. Это намного проще, и вы все равно можете редактировать его в блокноте без перекомпиляции, если вам нужно.

(который будет оказывать первую половину ответа как тоо)

...