Есть файл profiles.ini
в нём существует строчка, содержащая путь до некоторой папки, например:
Path=Profiles/6tk25599.default
Как мне прочитать файл и добраться до этого значения?
Вот всё содержимое файла:
[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path=Profiles/6tk25599.default
Default=1
В итоге я хочу получить путь: Profiles/6tk25599.default
Попробовал такой метод:
foreach (var str in File.ReadLines("profiles.ini").Skip(6).Take(1))
{
Console.WriteLine(str); // получаю путь: Path=Profiles/6tk25599.default
}
Вот, что Вам необходимо сделать:
foreach (string x in File.ReadAllLines("profiles.ini"))
{
string[] data = x.Split('=');
if (data.Length == 2 && data[0] == "Path")
{
Console.WriteLine(data[1]); // Вывод: Profiles/6tk25599.default
break;
}
}
UPD: Судя по обновлению Вашего вопроса, строка всегда остается на одной позиции. Так что все еще проще:
Console.WriteLine(File.ReadAllLines("profiles.ini")[6].Split('=')[1]);
UPD2: Как заметил @Андрей, лучше использовать метод File.ReadLines
, чтобы не хранить в памяти всю коллекцию строк. Так что обновляю ответ
Вариант для извлечения из изначально неизвестной
строки:
File.ReadLines("profiles.ini").First(x => x.StartsWith("Path=")).Split('=')[1];
Вариант для извлечения из изначально известной
строки:
File.ReadLines("profiles.ini").ElementAt(6).Split('=')[1];
Не уважаете вы ini файлы, да, устарели, но е мое, это тоже ведь придуманный человеком формат, такой же как XML или JSON, в свое время был очень популярным, да что там, даже сейчас часто где еще есть.
Так вот, с файлом надо работать как положено и для этого есть специальные инструменты в самой Windows! Создайте примерно такой класс источник и работайте как положено! :
public class IniFile
{
public string path;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,
string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
public IniFile(string iniPath)
{
path = iniPath;
}
public void IniWriteValue(string section, string key, string value)
{
WritePrivateProfileString(section, key, value, path);
}
public string IniReadValue(string section, string key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(section, key, "", temp, 255, path);
return temp.ToString();
}
}
Далее нам достаточно написать:
IniFile ini = new IniFile(@"D:\test.ini");
var result = ini.IniReadValue("Profile0", "Path");
Как верно заметил @EvgeniyZ в соседнем ответе, для разбора файлов в специализированных форматах нужно использовать средства предназначенные для этого, т. к. при "ручном" парсинге можно запросто забыть учесть какой-то нюанс.
Я на вашем месте подключил бы какую-нибудь библиотеку и воспользовался ей, например можно использовать ini-parser:
using IniParser;
using System;
class Program
{
static void Main(string[] args)
{
var filepath = @"...\Test.ini";
var parser = new FileIniDataParser();
var iniData = parser.ReadFile(filepath);
var sectionName = "Profile0";
var keyName = "Path";
var value = iniData[sectionName][keyName];
Console.WriteLine(value);
}
}
Преимущество этого подхода перед использованием WinAPI — отсутствие зависимости от платформы и большее удобство.
Всем приветИщу книгу где можно углубленно почитать про SQL (MySQL) Я уже пишу программку и так же у меня неплохо получается писать запросы