Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение информации, Вопрос ко всем 
:(
    Опции темы
artsb
Дата 11.5.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Перенимаю опыт. smile

Мне в приложении нужно хранить во время работы, записывать в файл и считывать из файла много "блоков" информации. Я решил эту проблему так:
Код

//Создал структуру:
struct myList
{
AnsiString name;
AnsiString path;
int count;
bool flag;
};
//Создал вектор:
#include <vector.h>
...
vector<myList> list;

И далее работаю с вектором. Сохраняю данные в цикле в ini файл со своим расширением. Естественно, это не практично и не безопасно: "умный" пользователь может открыть файл блокнотом и нагадить там.
Как вы работаете с информацией и файлами в таких случаях?
Спасибо всем за участие!


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Rrader
  Дата 11.5.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Криптуем данные smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
artsb
Дата 11.5.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Rrader, выложи ссылки по этой теме, если не тяжело.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Rrader
Дата 11.5.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191





--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
artsb
Дата 11.5.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Rrader, спасибо. xor'ом я пользовался уже. А, вообще, криптография это не совсем то, что я имел ввиду (но всё равно полезно). Я имею ввиду, как можно сохранять файлы с большим количеством информации компактно и надёжно (недоступно для пользователя).


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Rrader
  Дата 11.5.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Можешь использовать zlib для сжатия. Очень удобно.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
artsb
Дата 11.5.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Rrader @  11.5.2008,  17:28 Найти цитируемый пост)
Можешь использовать zlib для сжатия. Очень удобно.

Тоже вариант.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
orthrus
Дата 12.5.2008, 07:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 4
Всего: 16



Может тебе тут лучше использовать локальную БД(например SQLite или Firebird Embedded), и структура файла там чуток сложнее чем в ini файле, тем более что нужно
Цитата(artsb @  11.5.2008,  15:23 Найти цитируемый пост)
записывать в файл и считывать из файла много "блоков" информации



--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
ksili
Дата 12.5.2008, 10:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Сжатый или криптованный файл пользователь тоже может открыть в блокноте и нагадить там. Другое дело, что он не сможет нагадить осмысленно smile 
Использовать БД думаю наиболее оптимально. Вдруг в дальнейшем понадобится совершать поиск по этим данным - СУБД в этом поможет.

Чтоб юзер не мог править файл, записанный твоей прогой можно попробовать сдлеать так: создаешь пользователя с паролем. Запускаешь свою прогу от его имени (можно прописать в ярлыке). Прога пишет свои файлы в папку документов этого пользователя. А другой пользователь их прочесть не может, т.к. Windows не даст зайти в эту папку.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
xvr
Дата 12.5.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(artsb @ 11.5.2008,  16:48)
Rrader, спасибо. xor'ом я пользовался уже. А, вообще, криптография это не совсем то, что я имел ввиду (но всё равно полезно). Я имею ввиду, как можно сохранять файлы с большим количеством информации компактно и надёжно (недоступно для пользователя).

Запиши данные в файловый стрим (имя файла в виде "qqq:mydata"), пользователь увидит только файл qqq нулевой длинны.

PM MAIL   Вверх
artsb
Дата 12.5.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(ksili @  12.5.2008,  10:26 Найти цитируемый пост)
Другое дело, что он не сможет нагадить осмысленно

Я о том же.
Цитата(xvr @  12.5.2008,  14:00 Найти цитируемый пост)
Запиши данные в файловый стрим (имя файла в виде "qqq:mydata"), пользователь увидит только файл qqq нулевой длинны.

Вот это интересно, правда непонятно.
xvr, объясни плиз. Если можно на конкретном примере.

Пробовал с помощью функций fread и fwrite записывать структуру в файл поблоково. Но почему-то они не хотят рабоать с AnsiString, а char меня не устраивает. Как быть?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
xvr
Дата 13.5.2008, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(artsb @ 12.5.2008,  23:08)
Цитата(ksili @  12.5.2008,  10:26 Найти цитируемый пост)
Другое дело, что он не сможет нагадить осмысленно

Я о том же.
Цитата(xvr @  12.5.2008,  14:00 Найти цитируемый пост)
Запиши данные в файловый стрим (имя файла в виде "qqq:mydata"), пользователь увидит только файл qqq нулевой длинны.

Вот это интересно, правда непонятно.
xvr, объясни плиз. Если можно на конкретном примере.

MSDN: A Programmer's Perspective on NTFS 2000 Part 1: Stream and Hard Link
Цитата

Under an NTFS file system each file can have multiple streams of data. It's worth pointing out that streams are not a feature of NTFS 2000, but they have been in existence since Windows NT 3.1. When you read the content of a file under a non-NTFS volume (say, a disk partition of a Windows 98 machine) you're able to access only one stream of data. Consequently, you perceive it as the real and "unique" content for that file. Such a main stream has no name and is the only one that non-NTFS file systems can handle. But when you create a file on an NTFS volume, things might be different.
A multi-stream file is a sort of collection of single-stream files all embedded in the same file system entry. They definitely look like a unique and atomic unit, yet comprise a number of independent sub-units you can create, delete, and modify separately. There are a number of common programming scenarios where streams are more than handy. However, if you plan to use them, bear in mind that as soon as you copy a multi-stream file to a non-NTFS storage device (such as a CD, a floppy, or a non-NTFS disk partition), all extra streams will be unrecoverable if lost. Unfortunately, such a compatibility issue makes streams much less attractive in practice. For server-side applications designed and destined to run only on NTFS volumes, streams are an excellent tool to leverage to build great and creative solutions.
To identify a named stream within a file you should follow a particular naming convention and add at the end of the file name a colon followed by the stream name. For example, to access a stream called VersionInfo on a file called test.txt you should use the file name:
   Test.txt:VersionInfo
Use it with any Microsoft Win32® API function that manipulates files. To access the content of the VersionInfo stream, pass that name on to CreateFile() and then use ReadFile() and WriteFile() to accomplish reading and writing as usual. If you want to check whether a certain stream exists within a file, compose the file stream name as just shown and use CreateFile() to check it for existence:
Код

HANDLE hfile = CreateFile(szFileStreamName, GENERIC_READ, 0, 
   NULL, OPEN_EXISTING, 0, 0);
CloseHandle(hfile);
if (hfile == NULL)
   MessageBox(hWnd, "Error", NULL, MB_OK);


Цитата

Пробовал с помощью функций fread и fwrite записывать структуру в файл поблоково. Но почему-то они не хотят рабоать с AnsiString, а char меня не устраивает. Как быть?

Запись:
Код

AnsiString data=...;
fwrite(data.c_str(),1,data.size(),file);

Чтение:
Код

fseek(file,0,SEEK_END);
int fsize=ftell(file);
fseek(file,0,SEEK_SET);
AnsiString data=AnsiString::StringOfChar(' ',fsize);
fread(data.c_str(),1,fsize,file);


PM MAIL   Вверх
SABROG
Дата 13.5.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 3
Всего: 91



А как затестить рабочесть этой технологии стандартными средствами винды, т.е. блокнот там, консоль. Чтобы не пришлось писать на WinApi ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ksili
Дата 13.5.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(SABROG @  13.5.2008,  12:45 Найти цитируемый пост)
А как затестить рабочесть этой технологии стандартными средствами винды, т.е. блокнот там, консоль. Чтобы не пришлось писать на WinApi ?

FAR кажется понимает альтернативные потоки и может их читать


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
SABROG
Дата 13.5.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 3
Всего: 91





--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.