我有一个程序,用户可以在其中设置银行帐户。它将名称,地址,余额和帐户类型(按顺序)写入基本文本文件。我正在尝试为用户提供一种功能,使其能够通过提供新的名称和地址来更新其帐户。余额和帐户类型无法编辑,而是从基本文件中提取的。
该程序当前将新数据写入一个临时文件,该文件最终将覆盖其内容。但是,它也会将用户的旧数据写入文件,这不是我想要的。当前,文件将同时包含旧数据(在用户进行更改之前)和新数据(用户输入要更新的内容)。 我想要一些有关如何覆盖或跳过临时文件中的旧数据,而仅保留新数据和其他帐户的帮助。
我尝试使用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();
}
}
}
更新:我添加了一个示例以说明我要执行的操作。 NameValidation下的第一个for循环应该通过将空文件替换为旧文件来删除基础文件上的旧文件。但是,它不能按预期工作。它不向基本文件写入任何内容,然后崩溃,并显示错误“ System.IO.IOException:'该进程无法访问文件'C:\ program1 \ Bank.txt',因为该文件正在被另一个进程使用。 '“,当它带有StreamReader sre时。 但是,它会将下一个帐户的余额和帐户类型写入临时文件。
答案 0 :(得分:0)
好的。有关如何进行的一些提示。
这就是您的文本文件的格式
float
在插入之前,请检查名称是否已存在。如果是,则获取ID(如果存在testname,则必须获取ID值,即1)。
如果获得此ID,则可以解析文件并使用StreamWriter
更新它们[或]
阅读姓名和地址,并替换为string.replace