Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096

Пери сохранение файла.

05.04.2011, 21:25. Показов 1466. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! У меня возник вопрос. У меня например есть на форме Memo1 типа TMemo и OpenD типа TOpenDialog и SaveBut и LoadBut типа TButton. Если я нажму на кнопку LoadBut, то откроется диалоговое окно OpenD и я должен выбрать любой файл. Например *.mp3, *.avi, *.exe, *.doc и.т.д. Когда я выберу файл, то его содержимое (в любой структуре) должно выйти в Memo1 или любой другой текстовый компонент. Но после чего если я выполню сохранить и выберу тип файла тот же который открывал. То после сохранения он будет работать как всегда. Пример. Открываю jet.exe, допустим это какой нибудь калькулятор. И содержимое любой формы выходит в текстовое поле, после чего я нажимаю сохранить и он сохраняет под именем jet.exe из текстового файла. И если запустить созданный jet.exe то я увижу тот же калькулятор . Ассоциация идет с шифрованием . За ранее большое спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.04.2011, 21:25
Ответы с готовыми решениями:

Сохранение файла
Вобщем так... Есть форма, на ней 2 кнопки. Одна открывает файл(оупенДиалог1), производит там нужные изменения и закрывает. А вторая должна...

Создание/сохранение файла
Как создать файлы с помощью цикла, чтобы имена файлов менялись... TStringList *list = new TStringList; for ( int i = 1 ; i <= 4...

Сохранение и загрузка из файла
Столкнулся с проблемой загрузки из файла *.ini. для сохранения параметров программы использую ...

6
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
05.04.2011, 23:40
файл теряет целостность
например при открытии бинарного файла, будь то calc.exe или user32.dll
в Мемо запишутся символы грубо говоря побайтово (в разных кодировках по разному может быть 2 байта)
например в Мемо чиатеся пятый байт с содержанием (наприер 123 и если символа такого нет в кодировке то и запишется какой нибудь "квадрат" или вообще ничего

а при сохранение читается этот непонятный "квадрат" и записывается как есть



незнаю как лучше можно объяснить


можно читать файл побайтово и выводить содержимое в TMemo в HEX виде или в 10ричной системе а потом собирать обратно
1
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
05.04.2011, 23:40
Цитата Сообщение от Vlad_IT Посмотреть сообщение
Например *.mp3, *.avi, *.exe, *.doc и.т.д.
Такое разнообразие наверное можно загрузить только как двоичные файлы.
Это будет набор шестнадцатеричных циферок, и для вывода в Memo надо будет их преобразовать своей функцией.
Данные на диске лежат в строчку, а Memo делает перенос строки. И если будешь сразу из Memo сохранять в файл, в нём появятся лишние символы.
1
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
06.04.2011, 01:41
я чессказать не понял вопроса. Не увидел его в принципе.
Но если вы хотите грузить бинарные данные в текстовое поле, а потом их сохранить у вас ничего не выйдет. Курите информацию по бинарным данным.
1
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
06.04.2011, 02:49
вот пример, конечно не оптимизирован, но для понимания вполне годен

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    BYTE tmp; // переменная куда будет записываться прочтенный байт
    String temp = ""; // сюда будем записывать HEX значение
    TFileStream *old_file = new TFileStream("c:\\test.bmp", fmOpenRead); // открываем файл для чтения
 
    for(INT64 pos = 0; pos < old_file->Size; pos++) // простой цикл, читаем по 1 байту, пока не кончится файл
    {
        old_file->Position = pos; // ставим позицию для TFileStream 
        old_file->ReadBuffer(&tmp, 1); // читаем с этой позиции в переменную tmp - 1 байт
 
        temp = temp + IntToHex(tmp, 2) + " "; // записываем в строку этот байт в HEX виде
    }
 
    delete old_file; // чистим за собой
    old_file = NULL; // чистим за собой
 
    Memo1->Text = temp; // и кульминация, выводим в TMemo
PS. Так как это для "понимания" ситуации, то не надо использовать для теста файлы большого объема, да 1мб вполне хватит, иначе долго будет обрабатываться цикл, так как там идет чтение только по 1 байту (для быстродействия нужно не по 1 а например по 1024 байта читать или более... лень все выписывать в подробностях)

как потом записывать обратно видно тут: LINK

чтоб записывать обратно, нужен цикл
взять из TMemo, перевести в байт и записать значение в файл
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.04.2011, 03:31
Цитата Сообщение от Gremlin Посмотреть сообщение
вот
может, я неправильно копировал и вставлял код, но единственное, чего мне удалось добиться, это крепкого зависания программы на файле tornado03.bmp весом 370 кб., с файлом me_user_x100.bmp весом 30 кб. программа задумалась на секунды полторы, потом весело подмигнула курсором на пустом поле Мемо, и спокойно продолжила ждать, когда я начну снова нервно тискать кнопу, с тем же результатом .
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
23.04.2011, 03:27  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Все отлично получилось, всем спасибо . Извините что сразу не сказал. Ну если надо, то код выложу, надеюсь кому нибудь пригодится. Я его немного подправил и оптимизировал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TStringList* list = new TStringList;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
BYTE tmp; // создаем переменную для записывания прочитанного байта
TFileStream *old_file = new TFileStream("c:\\test.bmp", fmOpenRead); 
 for(INT64 pos = 0; pos < old_file->Size; pos++) 
 {
        old_file->Position = pos; // позиция
        old_file->ReadBuffer(&tmp, 1); //читаем байт 
 
        list->Add(AnsiString(tmp)); /* и я решил что если нету визуализации, то будет все намного быстрее и решил поставить вместо TMemo поставил TStringList :). Просто сама графическая обработка занимает куча ресурсов. А так все проходит очень гладко и быстро)))*/
  }
Memo1->Text = list->Text; /* ну а здесь мы уже выводим содержание но правда уже не в шестнадцатеричном виде, как сделал [b]Gremlin[/b], а в десятичном :). Просто у меня возникли проблемы с обратным переводом))))*/
Memo1->Lines->SaveToFile("c:\\tested.txt"); // а теперь сохраняем для последующего использования) 
delete old_file; // чистим за собой
old_file = NULL; // чистим за собооой
}
а теперь собственно, уже создаем файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button2Click(TObject *Sender)
{
BYTE tmp; 
TFileStream *old_file = new TFileStream("c:\\test2.bmp", fmCreate, fmOpenWrite); //создаем файл
Memo1->Lines->LoadFromFile("c:\\tested.txt");  //загружаем файл
for(INT64 pos = 0; pos < Memo1->Lines->Count; pos++) /*здесь может быть ошибка с количеством прохождения цикла, так как у меня мозги не варят по ночам, я мог сделать ошибку :). Но пока что все работало без проблем)) */
{
 tmp = list->Strings[pos].ToInt(); // так как мы выводили полученное значение в начале не в строку, а в каждую строку свой байт)
 old_file->Position = pos; 
 old_file->WriteBuffer(&tmp,1);
}
delete old_file; // чистим за собой
old_file = NULL; // чистим за собой
}

Всем спасибо за помощь
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2011, 03:27
Помогаю со студенческими работами здесь

Сохранение XML файла
Вывожу с xml файла данные в ListView, далее хочу сохранить эти данные в этом же виде только в новом текстовом или xml файле с помощью...

Сохранение текстового файла
void __fastcall TForm2::N4Click(TObject *Sender) { dot *T; int n; dot *Q; int m; int i; FILE*f;

Чтение и сохранение файла
Почти закончила лабораторную...и закосячила с функциями для работы с файлами(Write_File,Read_File) и их вызовами.Помогите, пожалуйста,...

Сохранение файла на диске
Можно ли как либо сохранить в файл текстовой- данные прямо из массива? String FIO; // массив FIO=&quot;Маша петрова&quot;; ...

Сохранение txt-файла
Сохраняю файл прямиком в папку с проектом: Memo1-&gt;Lines-&gt;SaveToFile(ExtractFileDir(ParamStr(0))+&quot;\&quot;+&quot;.txt&quot;); Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru