реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
smk
сообщение Nov 3 2012, 09:05
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Здравствуйте!

Прошу подсказать как правильно открыть файл в среде Visual Studio. Мне нужно при нажатии кнопки, размещенной на форме, производить открытие двоичного файла, редактирование его нескольких байт и запись под другим именем. Как это реализовать в Visual Studio на С ? Спасибо!


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 3 2012, 09:51
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Если Вам нет иеобходимости делать что-то вроде двоичного hex редактора, посмотрите в сторону функций
_tfopen(_T("filename.bin"), _T("r+b"));

_tfopen(_T("filename.bin"), _T("rb"));

_tfopen(_T("newfilename.bin"), _T("wb"));

fseek

fwrite

fread

fclose

Сообщение отредактировал Genadi Zawidowski - Nov 3 2012, 09:54
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 3 2012, 10:06
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Genadi Zawidowski @ Nov 3 2012, 11:51) *
Если Вам нет иеобходимости делать что-то вроде двоичного hex редактора, посмотрите в сторону функций
_tfopen(_T("filename.bin"), _T("r+b"));

_tfopen(_T("filename.bin"), _T("rb"));

_tfopen(_T("newfilename.bin"), _T("wb"));

fseek

fwrite

fread

fclose


Как таковой редактор не нужен. Нужно в прочитанном bin файле в программе изменить значение байт на известных позициях, сформировать hex и записать файл под другим именем.
Указанные Вами функции применять в обработчике события кнопки? Подключать файлы и декларировать что-либо еще где-то нужно?

Попробовал:
Код
------ Build started: Project: File_open_test, Configuration: Debug Win32 ------
Compiling...
File_open_test.cpp
f:\data\visual studio 2008\projects\file_open_test\file_open_test\Form1.h(115) : error C3861: '_tfopen': identifier not found
f:\data\visual studio 2008\projects\file_open_test\file_open_test\Form1.h(115) : error C3861: '_T': identifier not found
f:\data\visual studio 2008\projects\file_open_test\file_open_test\Form1.h(115) : error C3861: '_T': identifier not found
Build log was saved at "file://f:\DATA\Visual Studio 2008\Projects\File_open_test\File_open_test\Debug\BuildLog.htm"
File_open_test - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 3 2012, 18:38
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



посмотрите документацию на фунуцию fopen.

Открываете исходный файл, создаёте выходной файл (всё в бинарном режиме - буквочка b в параметре режима.
Копируете входной в выходной до начала модифицируемого места, потом читаете в буфер, модифицируете и записываете изменённую часть, потом копируете остаток файла.

Ну или прочитать всё в буфер и записать результат (это если файл небольщой).

ps: а погуглить на слово _tfopen было лень? У Вас просто не включена поддержка широких строк как параметров фукций в Вашем проекте. В зависимости от этого _tfopen определяется или как fopen для однобайтовых символов и как wfopen для двухбайтовых.

Цитата
сформировать hex

Не сразу заметил... Немного посложнее чем я в начале написал для бинарных файлов.

Сообщение отредактировал Genadi Zawidowski - Nov 3 2012, 18:40
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 4 2012, 08:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Genadi Zawidowski @ Nov 3 2012, 20:38) *
посмотрите документацию на фунуцию fopen.

Открываете исходный файл, создаёте выходной файл (всё в бинарном режиме - буквочка b в параметре режима.
Копируете входной в выходной до начала модифицируемого места, потом читаете в буфер, модифицируете и записываете изменённую часть, потом копируете остаток файла.

Ну или прочитать всё в буфер и записать результат (это если файл небольщой).

ps: а погуглить на слово _tfopen было лень? У Вас просто не включена поддержка широких строк как параметров фукций в Вашем проекте. В зависимости от этого _tfopen определяется или как fopen для однобайтовых символов и как wfopen для двухбайтовых.


Не сразу заметил... Немного посложнее чем я в начале написал для бинарных файлов.

fopen файл открыла. Проблема была в том, что я #include <stdio.h> писал после #include "Form1.h". Вот и не узнавалась fopen. Переставил и заработало. Теперь не получается посмотреть кусок файла или хотябы адрес его начала. Мне нужно модифицировать кусок размером 1004 байта начиная с байта 0x52F. Как мне из файла его переписать в массив и потом обратно, но уже в новый файл? fread? Не могу никак вывести значение байта файла а label, как это можно сделать? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 4 2012, 11:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Как можно сделать так чтобы в строке FILE* fout = fopen(("out.bin"),("wb")); вместо "out.bin" можно было использовать переменную String^ file_name; ? Visual Studio.

Как правильно записать if(dataGridView1->Rows[r]->Cells[c]->Value == "Текст") {mas[1] = 0;} ? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 4 2012, 21:19
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Использовать UNICODE версию функции fopen - _wfopen. Или почитать документациб на макросы A2W A2CW T2OLE OLE2W A2OLE A2T T2W W2A W2CA OLE2T W2OLE OLE2A T2A W2T
(список я процитировал из хелпа к визуал студио. F1 на клавиатуре).

Сообщение отредактировал Genadi Zawidowski - Nov 4 2012, 21:23
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 18:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01607 секунд с 7
ELECTRONIX ©2004-2016