【问题标题】:C# Find a variable in a file?C#在文件中查找变量?
【发布时间】:2015-12-10 22:29:07
【问题描述】:

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

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

这就是我想要的:

选择文件-->选择要编辑的部分/行-->输入数据-->保存数据 排队

文件如下所示:

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();

【问题讨论】:

    标签: c# database variables editing


    【解决方案1】:

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

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

    在你的情况下,我认为最好的选择是 -

    1. 保留一个包含所有可更新属性的对象。
    2. 接受输入并更新该对象的属性
    3. 最后完成后,将该对象数据写入文件中。因此,无论进行什么更改,都会自动反映在文件中..

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

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

    【讨论】:

    • 好的,谢谢,那我该怎么做呢?我现在不知道
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2010-09-12
      • 2011-08-20
      • 1970-01-01
      • 2013-10-05
      相关资源
      最近更新 更多