我正在使用Visual C#.NET,正在创建一个使用winforms的应用程序。我基本上需要打开多个文件作为字符串,并在不同的地方操纵数据而不将信息保存回文件。如何存储这些数据以便我可以在代码的各个部分使用它?
答案 0 :(得分:3)
创建一个包含文件字符串作为公共属性的单例,并使单例公开。
答案 1 :(得分:0)
我可能会使用静态类,除非你没有提到其他要求。
public static class MyFilesAsStrings
{
public static String FirstFile {get;set;}
public static LoadData()
{
FirstFile = System.IO.File.ReadAllText(@"C:\Temp\MyFile.dat");
// and so on
}
}
答案 2 :(得分:0)
为什么要打开它们“作为字符串”? .NET中的字符串是不可变的,因此如果您进行大量更改,它可能会变得昂贵。通常的方法是将数据解析/反序列化为对象模型,并将该对象模型传递到表单中 - 即
MyModel model = MyModel.Load(path);
MyForm form = new MyForm();
form.Model = model;
或类似的。然后您的表单可以访问模型的属性:
captionTextBox.Text = model.Title; // etc
如果你真的想要或使用数据绑定:
captionTextBox.DataBindings.Add("Text", model, "Title");
(将启用单向或双向绑定,具体取决于您的模型是否也提供更改通知)
答案 3 :(得分:0)
您可以采取多种方法。
如果文件是中小型的,您可以将内容加载到StringBuilder
或StringWriter
,并将其存储在Dictionary
的文件名索引中。
如果文件很大,您可以这样做,但您可能需要考虑在使用它们时将StringWriter
的内容保存到临时文件,并根据需要从临时文件重新加载。
如果文件很大,你只能读取文件中的部分或页面,并以与小文件相同的方式管理它们,除非磁盘上每个文件都有很多,所以你可能会这样做将它们存储在List
或类似的地方。
还有“复制到临时文件 - 编辑然后复制”的方法。简单,容易和有效,即使它确实使用了很多磁盘。
答案 4 :(得分:0)
我不确定我是否理解Singleton在这种情况下给你的东西,除了确保你没有多个字符串的副本。它无助于修改字符串本身。
我读到你的问题的方式是在内存中操作字符串(不写回文件)是至关重要的。基于此,有两个主要选项,StringBuilder和MemoryStream。
StringBuilder专门用于有效修改或附加到表示为字符串的数据。如果文件不是太大而不适合内存,StringBuilder是最好的选择。
您只需将文件的内容传递给StringBuilder构造函数即可。然后使用Append(),Insert(),Remove(),Replace()或indexer []等方法根据需要修改字符串数据。 Stringbuilder确保这些操作比在标准字符串上执行相同操作更有效。
您还可以将文件加载到MemoryStream中,然后使用StringReader(或StringWriter)获取类似于Stream的接口(Read(),Peek(),ReadLine()等)操纵字符串。
它比StringBuilder更多,但如果Stream样式方法更适合您的应用程序,则可能更受欢迎。