C# 在文件中查找变量?

C# Find a variable in a file?

我正在创建一个数据库,我的系统有一个小问题:我只能读取整个文件(不能读取变量),但可以将变量写入我的文件,但我需要能够编辑文件也。我可以编辑它,但我想自己编辑这些部分,而不必打开整个文件进行编辑/仅在部分中替换整个文件中的给定字符串。

我想询问用户他们要更改文件中的哪个部分,但我的脚本更改了给整个文件的所有字符串。

这就是我想要的:

select file -->select section/line to edit -->input data -->Save data to line

文件如下所示:

Name: Kim jr.

Age: 1980/05/20

Gender: Male

Status: Single

Weight: 46.2 Kg

Friends: Unknown

Notes: 
This is a dummy file, used for testing.

我的代码目前是这样的:

Console.Clear();

string[] fileArray = Directory.GetFiles(@"C:\Nova_Files\Database"); //slecets the files in the folder

if (fileArray.Length < 1)
{
    Console.WriteLine();
    Console.WriteLine("There are no files in the database for deleting");
    Console.ReadLine();
}
else
{
    Console.WriteLine("Here is a list of the files in the database, please select a file to edit.\n");

    foreach (string name in fileArray) //shows the files in the folder.
    {
        Console.WriteLine(name);
    }

    Console.WriteLine();
    userValue = Console.ReadLine();

    string filename = userValue;

    foreach (string x in fileArray)
    {
        if (x.Contains(filename))
        {
            Console.WriteLine();
            Console.WriteLine(filename + " Was selected for editing");
            Console.WriteLine();
            Console.WriteLine("Press anykey to continue");
            Console.ReadLine();
            Console.Clear();
            Console.WriteLine("The current editing " + filename);
            Console.WriteLine("The File [" + filename + "] Contains This:\n");

            string text = System.IO.File.ReadAllText(@"C:\Nova_Files\Database\" + filename);

            Console.WriteLine(text);
            Console.WriteLine();
            Console.WriteLine("What do you want to edit?");
            userValue = Console.ReadLine();

            string needOfEdit = userValue;

            Console.WriteLine();
            Console.WriteLine("What will you replace " + needOfEdit + " With?");
            userValue = Console.ReadLine();

            string replacement = userValue;

            File.WriteAllText(@"C:\Nova_Files\Database\" + filename, File.ReadAllText(@"C:\Nova_Files\Database\" + filename).Replace(needOfEdit, replacement));
            text = System.IO.File.ReadAllText(@"C:\Nova_Files\Database\" + filename);
            Console.WriteLine(text);
            Console.Read();

实际上那是不可能的。文件是保存在磁盘中的 inode 的顺序块。这是一个巨大的 linked list 结构。除非您获取并检查前一个节点,否则您无法找到下一个节点。

所以这意味着您不能只替换文件中的特殊位置。您必须至少读取一次文件直到该位置才能找到该位置。

对于你的情况,我认为最好的选择是 -

  1. 保留具有所有可更新属性的对象。
  2. 获取输入并更新该对象的 属性
  3. 最后完成后,将对象数据写入文件。所以无论做了什么改变,它都会自动反映在文件中..

这样您就可以跟踪更改的项目。

但是无论如何,每次在中间更改某些内容时,您都必须编写完整的文件。

如果您不介意引入 Microsoft.VisualBasic 程序集,您可以通过随机文件访问获得您想要的内容:

https://msdn.microsoft.com/en-us/library/aa711474(v=vs.71).aspx

MSDN link中描述的文件操作(如FileOpen)在您引用C#程序集后FileSystem class中。 -- 即 FileSystem.FileOpen()