Я использую Визуальный C#.NET и делаю приложение, которое использует winforms. Я по существу должен открыть несколько файлов как строки и управлять данными в различных местах, не сохраняя информацию назад в файл. Как я иду о том, чтобы хранить эти данные так, чтобы я мог использовать его в различных частях моего кода?
Почему открыть их «как строки»? Строки в .NET неизменяются, поэтому он может стать дорогим, если вы делаете много изменений. Обычный подход будет разбираться в анализе / десериализации данных в модели объекта и передавать эту модель объекта в ваши формы - то есть
MyModel model = MyModel.Load(path);
MyForm form = new MyForm();
form.Model = model;
или аналогичный. Тогда ваша форма может получить доступ к свойствам модели:
captionTextBox.Text = model.Title; // etc
или использовать привязку к данным, если вы действительно хотите:
captionTextBox.DataBindings.Add("Text", model, "Title");
(который будет включать в себя 1-стороннюю или двустороннюю привязку, в зависимости от того, обеспечивает ли ваша модель изменений)
Создайте Singleton, который содержит строки файла в качестве общедоступных свойств и сделать Pownleton Public.
Я не уверен, что я понимаю, что синглтон дает вам в этой ситуации, кроме того, чтобы у вас не было нескольких копий струн, висит вокруг. Это ничего не помогает с изменением самих строк.
То, как я прочитал ваш вопрос, заключается в том, что манипулирование строками в памяти (без записи обратно в файл) имеет решающее значение. На основании этого есть два основных варианта, StringBuilder и MemoryStream.
StringBuilder специально предназначен для того, чтобы позволить вам эффективно изменять или добавить к данным, представленным как строку. Если файл не слишком велик для него, чтобы соответствовать памяти, StringBuilder - лучший выбор.
Вы просто проходите содержимое файла в конструктор StringBuilder. Затем используйте такие методы, как Добавить (), INSERT (), удалить (), заменить () или индексатор [], чтобы изменить данные строки по мере необходимости. StringBuilder гарантирует, что эти операции намного эффективнее, чем делать то же самое на стандартной строке.
Вы также можете загрузить файл в Memoreream , а затем используйте StringReader (или StringWriter), чтобы получить поток, например интерфейс (READ (), PEEK (), READLILE ( ) и т. Д.) Для манипулирования строкой.
Это немного больше работы, чем StringBuilder, но может быть предпочтительным, если подход стиля потока лучше соответствует вашему приложению.
Я бы, наверное, использовал статический класс, если только нет других требований, о которых вы не упомянули.
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
}
}
http://gcc.gnu.org/wiki/Visibility
Это полное руководство по экспорту в msvc и gcc.
-121--1238896-Я бы, вероятно, использовал статический класс, если нет других требований, которые вы не упомянули.
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
}
}
-121--5086278- Существует ряд возможных подходов.
Если файлы небольшого или среднего размера, их можно загрузить в StringBuilder
или StringWriter
и сохранить в словаре
, индексированном по имени файла.
Если файлы большие, это можно сделать, но, возможно, потребуется сохранить содержимое StringWriter
во временном файле во время работы с ним и при необходимости перезагрузить его из временного файла.
Если файлы огромны, вы будете читать только части или страницы из файла и управлять ими в том же пути, что и небольшие файлы, за исключением того, что на диске будет много отдельных файлов, и поэтому вы можете хранить их в списке
или подобном.
Также всегда существует подход «копировать в временный файл, редактировать, затем копировать обратно». Простой, простой и эффективный, даже если диск используется много.