C # Хранение введенных пользователем данных - PullRequest
1 голос
/ 13 января 2009

Я пытаюсь написать программу на C #, где, когда пользователь вводит некоторые данные в текстовое поле и нажимает кнопку «Сохранить», информация сохраняется в каком-то файле, который при следующем открытии программы время информация автоматически загружается.

Я использую Visual C # express. Каков наилучший способ сделать это, не требуя какой-либо базы данных, такой как MySQL, MSSQL или Access?

Если единственный или самый простой способ - это база данных, я бы предпочел использовать Access. Если да, нужен ли пользователю программы установлен Access для запуска моей программы на своем компьютере? Что если я перейду с другой базой данных?

приписка

Я забыл упомянуть, я бы предпочел, чтобы пользователь не мог получить доступ к этому файлу и легко читать его содержимое. Текстовый файл без шифрования будет легко открыть. Любой способ зашифровать это? Кроме того, если я использую разделитель вроде «:», то это означает, что пользователь не может использовать этот символ. Так как иначе?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 13 января 2009

Сделайте ваши пользовательские данные сериализуемыми, добавив ключевое слово:

[Serializable]

выше вашей структуры данных. Когда вы загружаете диалоговое окно, загружаете вашу сериализованную структуру с диска, а когда вы покидаете диалоговое окно, сохраняете структуру данных.

С точки зрения стиля, вам, вероятно, не следует изменять данные в диалоговом окне, пока оно не будет закрыто (если оно модальное).

Для сохранения:

    private bool Save(String inFileName, MyObject inObject){
        try {
            FileStream theStream = File.Open(inFileName, FileMode.Create);

            BinaryFormatter theFormatter = new BinaryFormatter();
            theFormatter.Serialize(theStream, inObject);//add it to the end there
            theStream.Dispose();
            theStream.Close();
        } catch{
            return false;
        }
        return true;

    }

Для загрузки:

    private MyObject Read(String inFileName){
        MyObject theReturn = null;
        try {

            FileStream theStream = File.Open(inFileName, FileMode.Open, FileAccess.Read);                

            BinaryFormatter theFormatter = new BinaryFormatter();
            theReturn = (CImageData)theFormatter.Deserialize(theStream);//add it to the end there
            theStream.Dispose();
            theStream.Close();
        }
        catch {
            return null;
        }
        return theReturn;
    }

Вы также можете использовать «использование» в потоке, но я думаю, что этот код довольно прост. Это также означает, что вы можете добавить больше элементов в MyObject.

Редактировать: для шифрования вы можете добавить в AES или что-то подобное. Это может быть излишним для вас, и сохранение файла в двоичном виде может сделать его читаемым для чего-то вроде блокнота, но не легко редактируемым. Вот длинное объяснение реального шифрования:

http://msdn.microsoft.com/en-us/magazine/cc164055.aspx

2 голосов
/ 13 января 2009

Sql Compact Edition будет скрывать данные от легкодоступных (и их бесплатно). Вы также можете защитить паролем базу данных CE. База данных SQL CE полностью содержится в файле .SDF, например Access, так что вы можете скопировать файл .sdf и не беспокоиться о подключении к сети и т. Д.

1 голос
/ 13 января 2009

Если ваше приложение будет использоваться только одним человеком, просто сохраните ваши данные в файле (XML даст вам некоторую структуру)

Если ваше приложение будет использовать несколько человек и данные будут переданы между ними, тогда база данных - ваш лучший выбор. Если вы используете базу данных, то да, у вас должна быть установлена ​​база данных на вашем компьютере пользователя, хотя это можно сделать прозрачно для вашего пользователя, для этого вам лучше использовать встраиваемую базу данных, что-то вроде MySQL будет вашим лучшим ставка.

(РЕДАКТИРОВАТЬ: на самом деле база данных не обязательно должна находиться на компьютере пользователя, но он должен иметь возможность видеть ее со своего компьютера)

0 голосов
/ 13 января 2009

Если это очень просто, вы можете поместить его в простой текстовый файл. Для более структурированных данных вы можете сохранить их в формате CSV и проанализировать или создать XmlDocument и сохранить их на диск.

...