Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Открыть файл для редактирования
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
smk
Здравствуйте!

Прошу подсказать как правильно открыть файл в среде Visual Studio. Мне нужно при нажатии кнопки, размещенной на форме, производить открытие двоичного файла, редактирование его нескольких байт и запись под другим именем. Как это реализовать в Visual Studio на С ? Спасибо!
Genadi Zawidowski
Если Вам нет иеобходимости делать что-то вроде двоичного hex редактора, посмотрите в сторону функций
_tfopen(_T("filename.bin"), _T("r+b"));

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

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

fseek

fwrite

fread

fclose
smk
Цитата(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 ==========

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

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

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

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

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

Не сразу заметил... Немного посложнее чем я в начале написал для бинарных файлов.
smk
Цитата(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, как это можно сделать? Спасибо.
smk
Как можно сделать так чтобы в строке FILE* fout = fopen(("out.bin"),("wb")); вместо "out.bin" можно было использовать переменную String^ file_name; ? Visual Studio.

Как правильно записать if(dataGridView1->Rows[r]->Cells[c]->Value == "Текст") {mas[1] = 0;} ? Спасибо.
Genadi Zawidowski
Использовать UNICODE версию функции fopen - _wfopen. Или почитать документациб на макросы A2W A2CW T2OLE OLE2W A2OLE A2T T2W W2A W2CA OLE2T W2OLE OLE2A T2A W2T
(список я процитировал из хелпа к визуал студио. F1 на клавиатуре).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.