Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Streamreader编辑过多内容_C#_Streamreader - Fatal编程技术网

C# Streamreader编辑过多内容

C# Streamreader编辑过多内容,c#,streamreader,C#,Streamreader,我正在创建一个测验,但测验必须具备的选项之一是编辑问题的选项。程序通过问题编号查找问题,然后询问用户要在问题编号、问题级别、问题或问题答案之间编辑问题的哪一部分 假设我想编辑问题4,我想编辑这个问题的级别,从1到2。程序将进行此更改,但文本文件中每隔出现一次1将被替换为2(问题4之前出现的情况除外)。有人知道怎么解决吗 else if (editing == 2) { Console.Write("Please enter the new Level: "); NewLevel

我正在创建一个测验,但测验必须具备的选项之一是编辑问题的选项。程序通过问题编号查找问题,然后询问用户要在问题编号、问题级别、问题或问题答案之间编辑问题的哪一部分

假设我想编辑问题4,我想编辑这个问题的级别,从1到2。程序将进行此更改,但文本文件中每隔出现一次1将被替换为2(问题4之前出现的情况除外)。有人知道怎么解决吗

else if (editing == 2)
{
    Console.Write("Please enter the new Level: ");
    NewLevel = Convert.ToString(Console.ReadLine());
    string content = File.ReadAllText(RouteToEdit);
    content = content.Replace(questions[RecCount - 1].Level, NewLevel);
    File.WriteAllText(RouteToEdit, content);
}

您的
内容
看起来怎么样?您的
级别如何指定?您可以尝试替换的不仅仅是一个数字。类似于
Replace(“level”+levelNumber,NewLevel)
。问题是您将文件的全部内容作为字符串读取,然后执行字符串替换,替换文件中的每个实例。这肯定不是你想要的。真正的解决方案是使用合适的数据结构(在类中),该结构可以序列化到磁盘并从磁盘反序列化。唯一“修复”此问题的方法是更改所有读写和替换代码。不幸的是,我们不知道您是如何构建文件的,因此无法给出更具体的答案。正如@MattBurland所说,您正在对整个文件进行字符串替换,这显然不是您想要的。相反,您需要逐个问题/答案阅读文件“问题/答案”,并进行相应的更改。或者,正如Matt所说,使用更适合这种情况的数据结构和序列化。或者,你可能想研究使用数据库。马特的建议对我来说太高级了。该文件的内容由一个包含4个字符串的结构组成,这4个字符串是:问题编号、问题级别、问题、问题答案。下面是一个文件组成方式的示例(忽略文件中没有的斜体字):问题编号1问题级别1问题英格兰的首都是什么?A:都柏林B:伦敦C:纽约D:曼彻斯特问答b@COYG字体信不信由你,你认为它对你来说“太高级”是错误的。一旦你克服了一些令人困惑的术语,它实际上非常简单,而且比你自己手动解析文件的工作量要少得多。开始,向下滚动到标记为“示例”的部分。您所要做的就是在要序列化的类上粘贴一些属性,创建一个传递您的类型的
DataContractSerializer
实例,然后
WriteObject
ReadObject