Запись в файл при чтении с потоками? - PullRequest
3 голосов
/ 31 июля 2011

Я неправильно указал функцию для чтения файла конфигурации, но если в аргументе командной строки указано "-ip x.x.x.x", я хочу перезаписать настройку IP в файле конфигурации. Я использую следующий код, который читает хорошо, но добавляет мою новую строку в конец. Как я могу переписать строку, которую он читает?

    private static void ParsePropertiesFile(string file)
    {
        using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            StreamReader sr = new StreamReader(fs);
            StreamWriter sw = new StreamWriter(fs);

            string input;

            while ((input = sr.ReadLine()) != null)
            {
                // SKIP COMMENT LINE
                if (input.StartsWith("#"))
                {
                    continue;
                }
                else
                {
                    string[] line;
                    line = input.Split('=');

                    if (line[0] == "server-ip")
                    {
                        // If IP was not specified in the Command Line, use this instead
                        if (ServerSettings.IP == null)
                        {
                            // If the setting value is not blank
                            if (line[1] != null)
                            {
                                ServerSettings.IP = IPAddress.Parse(line[1]);
                            }
                        }
                        else
                        {
                            sw.("--REPLACE_TEST--");
                            sw.Flush();
                        }
                    }
                }
            }
        }
    }

Имеет смысл, почему он добавляется в конец, но я не могу придумать, как просто переписать строку, поскольку строка IP может быть длиннее, чем та, что есть в настоящее время.

1 Ответ

1 голос
/ 31 июля 2011

Более простой способ - прочитать все строки и заменить строки, которые вы хотите заменить, а затем снова добавить новые строки в файл, например:

string[] lines = File.ReadAllLines("Your file path");

for  (int lineIndex = 0; lineIndex < lines.Length; lineIndex++)
{
    if (/*if we want to modify this line..*/)
    {
        lines[lineIndex] = "new value";
    }
}

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