Как перезаписать или пропустить определенные строки при копировании в другой текстовый файл - PullRequest
0 голосов
/ 19 января 2019

У меня есть программа, в которой пользователь может настроить банковский счет.Он записывает (по порядку) имя, адрес, баланс и тип счета в базовый текстовый файл.Я пытаюсь предоставить пользователю возможность обновить свою учетную запись, указав новое имя и адрес.Баланс и тип счета нельзя редактировать, и они взяты из базового файла.

В настоящее время программа записывает новые данные во временный файл, который в конечном итоге перезаписывает базовый файл его содержимым.Тем не менее, он также записывает старые данные от пользователя в файл, а это не то, что я хочу.В настоящее время файл будет содержать как старые данные (до того, как пользователь их изменил), так и новые данные (что пользователь ввел для обновления).Я хотел бы получить некоторую помощь о том, как я могу перезаписать или пропустить старые данные во временном файле и оставить только новые данные и другие учетные записи.

Я пытался реализовать эту функцию с помощью метода String.Replaceитерируя его для каждого элемента данных, используя цикл for (я использую цикл for, чтобы показать данные пользователя, если они выбирают опцию просмотра своих данных, которая работает для этого), но он не функционировал должным образом (он не работалзаменить текст или сделать что-нибудь).

 else if (ChoiceInput == "3")
                //Choice 3 - Update account details.
                {
                    //Check that the account exists.

                    using (FileStream fs2 = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite))
                    {
                        StreamReader sr2 = new StreamReader(fs2);
                        StreamWriter sw2 = new StreamWriter(fs2);
                            Console.Write("Enter the account name: ");
                            string NameCheck = Console.ReadLine();
                            string NameValidation;
                        try
                        {
                            NameValidation = sr2.ReadLine();
                            string NameReplace = NameValidation;
                            NameReplace.Replace(NameValidation, "");
                            sw2.Write(NameReplace);
                            while (NameValidation != null)
                                {
                                    if (NameValidation.Contains(NameCheck))
                                    //Account exists.
                                    {
                                        for (int i = 0; i < 3; i++)
                                        {
                                        if (i == 1)
                                        {
                                            string ReadReplace = sr2.ReadLine();
                                            ReadReplace.Replace(ReadReplace, "" + "\r\n");
                                            sw2.Write(NameReplace);
                                            Console.WriteLine(ReadReplace);
                                        }
                                        else if (i == 2)
                                        {
                                            string ReadReplace = sr2.ReadLine();
                                            ReadReplace.Replace(ReadReplace, "" + "\r\n");
                                            sw2.Write(NameReplace);
                                            Console.WriteLine(ReadReplace);
                                        }
                                        }
                                    }
                                using (StreamWriter sw = new StreamWriter(FileNameTemp, true))
                                    {
                                    //Enter new details. It writes these details to the temporary file.
                                    Console.WriteLine("Account found.");
                                        Console.WriteLine("Enter new name: ");
                                        string AccountName = Console.ReadLine();
                                        sw.WriteLine(AccountName);
                                        Console.WriteLine("Enter new address: ");
                                        string AccountAddress = Console.ReadLine();
                                        sw.WriteLine(AccountAddress);
                                        NameValidation = null;
                                        for (int i = 0; i < 3; i++)
                                        //Loop that iterates twice, writing the balance and account type to the temporary file. This data cannot be changed.
                                        {
                                            string Write = sr2.ReadLine();
                                            if (i == 1)
                                            //Balance.
                                            {
                                                sw.WriteLine(Write);
                                            }
                                            else if (i == 2)
                                            //Account type.
                                            {
                                                sw.WriteLine(Write);
                                            }
                                        }
                                    }
                                    using (StreamReader sre = new StreamReader(FileName, true))
                                    {
                                        using (StreamWriter sw = new StreamWriter(FileNameTemp, true))
                                        {
                                            string Lines;
                                            int Counter = 0;
                                            while ((Lines = sre.ReadLine()) != null)
                                            //While the program still has lines to go through, it will continue writing to the text file.
                                            {
                                                Console.WriteLine(Lines);
                                                sw.Write(Lines + "\r\n");
                                                Counter++;
                                            }
                                        }
                                        using (FileStream fs = new FileStream(FileNameTemp, FileMode.Truncate))
                                        //Clears the temporary file, as not doing so would cause issues.
                                        {
                                        }
                                        Console.WriteLine("Account details updated!");
                                    }
                                }
                        }
                        finally
                        {
                            Console.ReadLine();
                        }
                        }
                    }

Обновление: я добавил пример того, что я пытаюсь сделать.Первый цикл for в NameValidation должен удалить старые детали базового файла, заменив их пустыми строками.Тем не менее, это не работает, как задумано.Он ничего не записывает в базовый файл, а затем завершается с ошибкой «System.IO.IOException:« Процесс не может получить доступ к файлу «C: \ program1 \ Bank.txt», поскольку он используется другим процессом.'", когда он переносится на StreamReader sre.Тем не менее, он записывает баланс и тип счета следующий счет во временный файл.

1 Ответ

0 голосов
/ 20 января 2019

Хорошо. Несколько советов о том, как действовать.

Вот как должен выглядеть ваш текстовый файл

Id, Name, address, Balance
1, testName, xyz, 300

Перед вставкой проверьте, существует ли имя уже. Если да, получите идентификатор (здесь, если testname существует, мы должны получить значение идентификатора, т.е. 1).

Если мы получим этот идентификатор, мы можем проанализировать файл и обновить его с помощью StreamWriter

[Or]

Прочитать имя и адрес, заменить на string.replace

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