Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение в файл текущей задачи 
:(
    Опции темы
vol4ek
Дата 16.11.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



дай файлу расширение системное com,exe,dll и спрячь куда нибудь в Windows\\system32 например. Не забудь указать путь в GetPrivateProfileString(). Создать свою папку можно так CreateDirectory("путь\\имя",NULL);
PM MAIL ICQ   Вверх
Данкинг
Дата 16.11.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Нитонисе, ещё извращённый способ: хранить настройки в .dbf. И таблица, и редактировать "простому смертному" не дано.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
vol4ek
Дата 16.11.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Цитата(Данкинг @ 16.11.2011,  13:31)
Нитонисе, ещё извращённый способ: хранить настройки в .dbf. И таблица, и редактировать "простому смертному" не дано.

мы не ищем легких путей. smile 
PM MAIL ICQ   Вверх
Нитонисе
Дата 16.11.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

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



Цитата(vol4ek @  16.11.2011,  13:31 Найти цитируемый пост)
дай файлу расширение системное com,exe,dll и спрячь куда нибудь в Windows\\system32 например.

Не, файл прятать не нужно. По сути файл - это проект пользователя. Как отдельный файл Word например. Этот файл можно передать другому пользователю и он может посмотреть работу первого пользователя.
PM MAIL   Вверх
Alca
Дата 16.11.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



MDB


--------------------
PM WWW ICQ Skype Jabber   Вверх
Данкинг
Дата 16.11.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(vol4ek @  16.11.2011,  14:33 Найти цитируемый пост)
мы не ищем легких путей.

Вообще я бы так и сделал, особенно если сохраняемых настроек много. smile

Добавлено через 33 секунды
Цитата(Alca @ 16.11.2011,  15:08)
MDB

Или даже так. 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
xvr
Дата 16.11.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Нитонисе @  16.11.2011,  09:32 Найти цитируемый пост)
Вот нужно все это записать в файл и затем загрузить из него, записав все значения полей, таблиц и запомнив состояние переключателя.

Обойти форму (проперти Components и ComponentsCount кажется) и сбросить содержимое контролов (имя брать из проперти Name, а вот значение придется вытаскивать вручную для каждого типа контрола).
Сбрасывать можно как в ini файл, так и в xml - как удобнее
Цитата(Нитонисе @  16.11.2011,  13:25 Найти цитируемый пост)
Просто хочу лишить пользователя возможности править файл вручную,

Подписать файл. Например посчитать его MD5 и записать в конец


Это сообщение отредактировал(а) xvr - 16.11.2011, 14:34
PM MAIL   Вверх
ZVano
Дата 24.11.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

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



Цитата(Нитонисе @  16.11.2011,  13:25 Найти цитируемый пост)
Просто хочу лишить пользователя возможности править файл вручную

Можно воспользоваться BASE64 кодированием значений.
API: CryptStringToBinary и CryptBinaryToString.

У меня их вызовы обернуты в библиотеку. Не очень удачный вариант кода, но все же лучше чем ничего.

myLib.h
Код

    namespace winapi {
        namespace wincrypt {
            enum TCryptStringMode {
                CSM_BASE64HEADER // CRYPT_STRING_BASE64HEADER           0x00000000
                , CSM_BASE64 // CRYPT_STRING_BASE64                 0x00000001
                , CSM_BINARY // CRYPT_STRING_BINARY                 0x00000002
                , CSM_BASE64REQUESTHEADER // CRYPT_STRING_BASE64REQUESTHEADER    0x00000003
                , CSM_HEX // CRYPT_STRING_HEX                    0x00000004
                , CSM_HEXASCII // CRYPT_STRING_HEXASCII               0x00000005
                , CSM_BASE64_ANY // CRYPT_STRING_BASE64_ANY             0x00000006
                , CSM_ANY // CRYPT_STRING_ANY                    0x00000007
                , CSM_HEX_ANY // CRYPT_STRING_HEX_ANY                0x00000008
                , CSM_BASE64X509CRLHEADER // CRYPT_STRING_BASE64X509CRLHEADER    0x00000009
                , CSM_HEXADDR // CRYPT_STRING_HEXADDR                0x0000000a
                , CSM_HEXASCIIADDR // CRYPT_STRING_HEXASCIIADDR           0x0000000b
                , CSM_HEXRAW // CRYPT_STRING_HEXRAW                 0x0000000c
                , CSM_HASHDATA // CRYPT_STRING_HASHDATA               0x10000000
                , CSM_STRICT // CRYPT_STRING_STRICT                 0x20000000
                , CSM_NOCRLF // CRYPT_STRING_NOCRLF                 0x40000000
                , CSM_NOCR // CRYPT_STRING_NOCR                   0x80000000
            };
            extern DWORD GetCodeCryptStringMode(TCryptStringMode mode);

            extern bool API_CryptBinaryToString(RawByteString data, TCryptStringMode mode, AnsiString *out_result);
            extern bool API_CryptStringToBinary(RawByteString data, TCryptStringMode mode, AnsiString *out_result);
        };
    };


myLib.cpp
Код

    namespace winapi {
        namespace wincrypt {
            DWORD GetCodeCryptStringMode(TCryptStringMode mode) {
                DWORD result = 0;

                switch(mode) {
                case CSM_BASE64HEADER:
                    result = CRYPT_STRING_BASE64HEADER;
                    break;
                case CSM_BASE64:
                    result = CRYPT_STRING_BASE64;
                    break;
                case CSM_BINARY:
                    result = CRYPT_STRING_BINARY;
                    break;
                case CSM_BASE64REQUESTHEADER:
                    result = CRYPT_STRING_BASE64REQUESTHEADER;
                    break;
                case CSM_HEX:
                    result = CRYPT_STRING_HEX;
                    break;
                case CSM_HEXASCII:
                    result = CRYPT_STRING_HEXASCII;
                    break;
                case CSM_BASE64_ANY:
                    result = CRYPT_STRING_BASE64_ANY;
                    break;
                case CSM_ANY:
                    result = CRYPT_STRING_ANY;
                    break;
                case CSM_HEX_ANY:
                    result = CRYPT_STRING_HEX_ANY;
                    break;
                case CSM_BASE64X509CRLHEADER:
                    result = CRYPT_STRING_BASE64X509CRLHEADER;
                    break;
                case CSM_HEXADDR:
                    result = CRYPT_STRING_HEXADDR;
                    break;
                case CSM_HEXASCIIADDR:
                    result = CRYPT_STRING_HEXASCIIADDR;
                    break;
                case CSM_HEXRAW:
                    result = CRYPT_STRING_HEXRAW;
                    break;
                case CSM_HASHDATA:
                    result = CRYPT_STRING_HASHDATA;
                    break;
                case CSM_STRICT:
                    result = CRYPT_STRING_STRICT;
                    break;
                case CSM_NOCRLF:
                    result = CRYPT_STRING_NOCRLF;
                    break;
                case CSM_NOCR:
                    result = CRYPT_STRING_NOCR;
                    break;
                default: ;
                }
                return result;
            }

            bool API_CryptBinaryToString(RawByteString data, TCryptStringMode mode, AnsiString *out_result) {
                DWORD result_size;
                BOOL api_result;
                AnsiString result;
                DWORD modeDW = GetCodeCryptStringMode(mode);

                api_result = CryptBinaryToString((unsigned char*)data.c_str(), data.Length(), modeDW, NULL, &result_size);
                if (!api_result) {
                    return false;
                }
                char *mem_data = NULL;
                mem_data = (char*)GlobalAlloc(GPTR, result_size);
                try {
                    api_result = CryptBinaryToString((unsigned char*)data.c_str(), data.Length(), modeDW, mem_data, &result_size);
                    if (!api_result) {
                        return false;
                    }
                    result = AnsiString(mem_data);
                }
                __finally {
                    GlobalFree(mem_data);
                }
                result = result.Delete(result_size - 1, 2);

                *out_result = result;
                return true;
            }

            bool API_CryptStringToBinary(RawByteString data, TCryptStringMode mode, AnsiString *out_result) {

                BOOL api_result;
                DWORD result_size;
                AnsiString result;
                DWORD modeDW = GetCodeCryptStringMode(mode);

                api_result = CryptStringToBinary(data.c_str(), data.Length(), modeDW, NULL, &result_size, NULL, NULL);
                if (!api_result) {
                    return false;
                }
                char *r;
                r = (char*)GlobalAlloc(GPTR, result_size);
                try {
                    api_result = CryptStringToBinary(data.c_str(), data.Length(), modeDW, r, &result_size, NULL, NULL);
                    if (!api_result) {
                        return false;
                    }
                    result = AnsiString(r);
                    result.SetLength(result_size);
                }
                __finally {
                    GlobalFree(r);
                }

                *out_result = result;
                return true;
            }
        }
    }


Используем например так:
Код

        /*Кодирует строку в формат BASE-64*/
        UnicodeString UnicodeStringToBase64(UnicodeString data, int newlinePos){
            AnsiString result;
            AnsiString dataA = data;
            winapi::wincrypt::API_CryptBinaryToString(dataA, winapi::wincrypt::CSM_BASE64, &result);
            result = StringReplace(result, "\r\n", "", TReplaceFlags() << rfReplaceAll);
            result = StringReplace(result, "\n", "", TReplaceFlags() << rfReplaceAll);
            if (newlinePos > 0) {
                int pos = 1;
                RawByteString wrap_result;
                while (true){
                    if (pos > result.Length()) {
                        break;
                    }
                    wrap_result = wrap_result + result.SubString(pos, newlinePos) + "\r\n";
                    pos += newlinePos;
                }
                result = wrap_result;
            }
            return result;
        }

        /*Декодирует строку из формата BASE-64*/
        UnicodeString Base64ToUnicodeString(UnicodeString data){
            AnsiString dataA = data;
            AnsiString result;
            winapi::wincrypt::API_CryptStringToBinary(dataA, winapi::wincrypt::CSM_BASE64, &result);
            return result;
        }


Это сообщение отредактировал(а) ZVano - 24.11.2011, 10:32


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
XPyCT
Дата 25.11.2011, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

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



Все гораздо и гораздо проще.

1 создаешь структуру
2.Вектор
3. #include<stdio.h>, #include<vector> 

и сохраняешь и читаешь все что тебе нужно из вектора

сохраняешь в бинарный файл расширение дат или какое тебе нужно

лично читаю файлы на ура такого рода как приложен в аттаче

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Exp.dat 16,77 Kb
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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