Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2015, 22:13   #1
MHZ-MHZ
 
Регистрация: 30.11.2015
Сообщений: 3
По умолчанию Бинарный редактор файлов(С++)

Бинарный редактор файлов(С++)
Характеризуется названием и дескриптором файла, который редактируется.
Поддерживает специфические методы:
• чтение и запись байта на заданной позиции;
• определение размера файла.
конструкторы:
• с одним аргументом - открывает файл с заданной названием;
• с двумя аргументами - открывает файл с заданной названием и создает его копию в файле с иной заданной названием (во втором аргументе)
• с одним аргументом - открывает файл с заданной названием и выполняет операцию XOR над каждым его байтом и заданным байтовым значением.

Код:
#include <stdio.h>
#include <iostream>
using namespace std; 
typedef unsigned char BYTE;
long getFileSize(FILE *file)
{
	long lCurPos, lEndPos;
	lCurPos = ftell(file);
	fseek(file, 0, 2);
	lEndPos = ftell(file);
	fseek(file, lCurPos, 0);
	return lEndPos;
}
int main()
{
	const char *filePath = "D:\\Документ.txt";	
	BYTE *fileBuf;	
	FILE *file = NULL;	

	if ((file = fopen(filePath, "rb")) == NULL)
		cout << "Не найдено файл!" << endl;
	else
		cout << "Файл  открыт успешно" << endl;
	long fileSize = getFileSize(file);
	fileBuf = new BYTE[fileSize];

	fread(fileBuf, fileSize, 1, file);
	for (int i = 0; i < 100; i++)
		printf("%X ", fileBuf[i]);
	cin.get();
	delete[]fileBuf;
        fclose(file);  
	return 0;
}
Переделать по тому заданию.

Последний раз редактировалось Stilet; 01.12.2015 в 10:41.
MHZ-MHZ вне форума Ответить с цитированием
Старый 08.02.2016, 22:56   #2
MHZ-MHZ
 
Регистрация: 30.11.2015
Сообщений: 3
По умолчанию

Код:
#include "stdafx.h" 
#include <iostream> 
using namespace std; 
class binar 
{ 
char* name; 
FILE *filename; 
char* openned_file; 
char* xor_file; 
int length; 
public: 
binar(char*); //Открывает файл 
binar(char*, char*); //Открывает файл и создает его копию 
binar(char*, int); //Открывает файл и проводит xor 
char read(int);//чтения байта на заданной позиции 
void write(int, char);//запись байта на заданной позиции 
int getlength();//определение размера файла 
}; 
binar::binar(char* name){this->name = name;};//Конструктор который открывает файл 
binar::binar(char* name, char* copy_name)//Конструктор открывает файл и создает его копию 
{ 
this->name = name; 
fopen_s(&filename, this->name, "r"); 
fseek(filename, 0, SEEK_END); 
length = ftell(filename); 
fseek(filename, 0, SEEK_SET); 
openned_file = new char[length]; 
fread(openned_file, length, 0, filename); 
FILE *copy_file; 
fopen_s(&copy_file, copy_name, "w"); 
fprintf(copy_file, openned_file); 
fclose(copy_file); 
fclose(filename); 
}; 
binar::binar(char* name, int xorl)//Конструктор открывает файл и делает xor 
{if (xorl){ 
this->name = name; 
fopen_s(&filename, this->name, "r"); 
fseek(filename, 0, SEEK_END); 
length = ftell(filename); 
fseek(filename, 0, SEEK_SET); 
openned_file = new char[length]; 
fread(openned_file, length, 0, filename); 
openned_file[length] = 0; 
for (int i = 0; i < length + 1; i++) xor_file[i] = openned_file[i] ^ openned_file[i + 1]; 
fclose(filename); 
};}; 
char binar::read(int position)//Метод чтения позиции строки из файла 
{ 
fopen_s(&filename, name, "r"); 
fseek(filename, 0, SEEK_END); 
length = ftell(filename); 
fseek(filename, 0, SEEK_SET); 
openned_file = new char[length]; 
fread(openned_file, length, 0, filename); 
fclose(filename); 
return openned_file[position]; 
}; 
void binar::write(int position, char symb)//Метод записи в файл 
{ 
fopen_s(&filename, name, "w"); 
fseek(filename, 0, SEEK_END); 
length = ftell(filename); 
fseek(filename, 0, SEEK_SET); 
openned_file = new char[length]; 
fread(openned_file, length, 0, filename); 
openned_file[position] = symb; 
fprintf(filename, openned_file); 
fclose(filename); 
}; 
int binar::getlength(){return length;};//Метод получения длины 
int main() 
{ 
setlocale(LC_ALL, "Russian"); 
binar h("D:\\Makc.txt"); 
bool Enter = true; int n; 
cout <<"Бинарный редактор файлов."<<endl; 
cout << " 0 - Выйти" << endl; 
cout << " 1 - Считать символ из строки в файле" << endl; 
cout << " 2 - Записать символ в строку в файле" << endl; 
cout << " 3 - Получить длину файла" << endl; 
while (Enter) 
{ 
cout << "Установите состояние если сможете:"; 
cin >> n; 
switch (n) 
{ 
case 0: 
Enter = false; 
cout << "Спасибо что вышли:)"; 
getchar(); 
break; 
case 1: 
{ 
int position1; 
cout << "Введите позицию:"; cin >> position1; 
cout << "Символ:" << h.read(position1) << "\n\n"; 
} 
break; 
case 2: 
{ 
int position2; char symbol1; 
cout << "Введите позицию:"; cin >> position2; 
cout << "Введите символ:"; cin >> symbol1; 
h.write(position2, symbol1); 
cout << "Замена сделана!!!\n\n"; 
} 
break; 
case 3:cout << "Количество символов:" << h.getlength() << "\n\n"; 
break; 
};}; 
getchar(); 
return 0; 
};
MHZ-MHZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный редактор (С++) mMirage Помощь студентам 1 10.10.2012 09:07
редактор CHM файлов Firstchar Общие вопросы Delphi 1 25.05.2012 07:27
JAVA - редактор файлов Arazei Помощь студентам 0 29.08.2011 23:22
Редактор файлов slavec Общие вопросы Delphi 5 25.08.2009 00:10