powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите, господа программисты
19 сообщений из 19, страница 1 из 1
Помогите, господа программисты
    #34306933
Добрый день. Прошу консультацию.
Задача: Зашифровать DBF файл, реализация алгоритма есть, и текстовые файлы шифруются «на ура». Но! Возникла проблема с DBF файлами.
Есть файл, условно назовем его A. DBF, не могу элементарно скопировать его побайтно в файл GOOD.DBF
Делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
void _GetFile(ParamBlk FAR *parm)
{
   	string sErr;
	char  * cerr;
	char szFile[ 255 ];
	 LoadReferC(p( 0 ).loc,szFile); //  в szFile имя файла
	long iLen= 0 ;
	try
	{
		ifstream iFile(szFile, ifstream::in  | ifstream::binary );
		ofstream oFile("D:\\GOOD.DBF",  ofstream::binary );
		if (!iFile.is_open() )  throw (ifstream::failure("Error Open File"));
    
  	    char  cbyte=0x00;
   	  while (! iFile.eof()) 
		  {
		  cbyte = iFile.get();
		  oFile<<cbyte;
		  }

  iFile.close();
  oFile.close();

   	} catch (ifstream::failure error  ) 
		{ 
		sErr = error.what();
		iLen = sErr.size()+ 1 ;
		cerr = new char [iLen];
		strcpy (cerr, sErr.c_str());
	  	   SaveDataToRef(&p( 1 ).loc,cerr); 
		_RetLogical((int) FALSE);
		}



delete [ ] cerr;
}
После копирования :
1) На 1 байт больше;
2) Среда Visual Foxpro говорит мне что файл поврежден. И это только в том случае если DBF хотя бы одну запись.
3) Привожу скрины файлов ( сам не врублюсь че не нравиться )

Исходный файл, открываеться:
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34306972
Его НЕX:
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307001
Вот НЕX копии:
Откуда FF берется так же не понятно.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307005
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван Иванович пишет:

> Задача: Зашифровать DBF файл, реализация алгоритма есть, и текстовые

Вообще-то готовые библиотеки для шифрования DBF для FoxPro
есть еще со времен DOS-а. Может вам подойдут ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307017
MasterZiv, нет, не подойдут. Иначе не спрашивал бы.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307178
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
    while (! iFile.eof()) 
  {
  cbyte = iFile.get();
  oFile<<cbyte;
  }

Проверять лень, но, скорее всего, дело в следующем. iFile устанавливает признак конца
файла не при чтении последнего байта, а при попытке чтения за концом файла. Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
    while (! iFile.eof()) 
  {
  cbyte = iFile.get();
  if (iFile.eof()) break;
  oFile<<cbyte;
  }
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307196
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Текстовый файл, прогнанный через эту программу, не меняется? Не верю.

2. Чтение из файла — get(), запись — <<
Это правильно?

3. Не нравится char cbyte; хотелось бы unsigned char.

Хотя это всё может быть и не о том.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307226
Ой Вэй, файл меняется, разница в 1 байт, как видно из скрина.
Сделал еще проще ( как отбойны молоток)
Код: plaintext
while (!iFile.eof())   oFile.put( iFile.get() ) ;
Но меня терзают смутные сомнения, что что-то с флагами чтения -записи из фалового потока ввода вывода.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307240
ФаЙлового :)
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307254
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай как я сказал:)
Код: plaintext
1.
2.
3.
4.
5.
6.
   while (! iFile.eof()) 
  {
  cbyte = iFile.get();
  if (iFile.eof()) break;
  oFile<<cbyte;
  }
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307273
Hryuckinnen , не прокатило. Все равно на 1 байт больше получается. Откуда-то берется байт FF в самом конце фала после байта окончания файла. Даже если его стереть в ручную, получается полная копия исходного файла, который (исходный) открывается, но среда Visual Foxpro видит какой-то "косяк", хотя и понимает, что это именно файл DBF.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307332
Тут вообще странность. Если в файле нет ни одной записи ( просто заголовок таблицы) то все ОК. А если присутствует хотяды 1 запись, то при открытии лезет:
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307351
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил у себя в 6-м Билдыре. FF возвращается методом iFile.get(). Даже если входной файл не существует, iFile.get () возвращает FF. Также проверил на предмет того, что будет, если сначала читать, потом проверять на eof (), а потом, если не eof (), то записывать. Реально при этом FF в выходной файлик не попадает. Совет: убивай выходной файлик перед тем, как пробовать.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307366
Hryuckinnen, спасибо. А не подскажете как его (новый) создать средствами iostream для чтения и записи или другим методом ?
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307398
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
А не подскажете как его (новый) создать средствами iostream для чтения и записи или другим методом ?

Вообще-то ofstream сам создает файлик, если его нет, при вызове метода open (filename, ios_base::out) или при вызове конструктора с теми же параметрами.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307422
Hryuckinnen, создает. Проверил. Но не полную копию.
Сделал так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
void _GetFile(ParamBlk FAR *parm)
{
    char szIFile[ 255 ];
	char szOFile[ 255 ];

	LoadReferC(p( 0 ).loc,szIFile);
	LoadReferC(p( 1 ).loc,szOFile);

	try
	{
		ifstream iIFile(szIFile, ifstream::in  | ifstream::binary );
		ofstream oFile(szOFile,  ofstream::binary );
		if (!iIFile.is_open() )  throw (ifstream::failure("Error Open File"));
    
     	  while (!iIFile.eof())
		  {
			  if (iIFile.eof()) break;
			  oFile.put( iIFile.get() ) ;
		  }
		 
                           iIFile.close();
                           oFile.close();

   	} catch (ios::failure error ) 
		{ 
		string sErr = error.what();
		char* cerr = new char [sErr.size()+ 1 ];
		strcpy (cerr, sErr.c_str());
	             SaveDataToRef(&p( 2 ).loc,cerr); 
		 delete [ ] cerr;
		_RetLogical((int) FALSE);
		}
}
Все равно пишет что файл поврежден. Вообще не врублюсь что за фигня.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307435
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эт неправильно:

Код: plaintext
1.
2.
3.
4.
5.
while (!iIFile.eof())
{
  if (iIFile.eof()) break;
  oFile.put( iIFile.get() ) ;
}

Надо так:

Код: plaintext
1.
2.
3.
4.
5.
6.
while (!iIFile.eof())
{
  char c = iIFile.get();
  if (iIFile.eof()) break;
  oFile.put(c) ;
}
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307456
Да! Спасибо ! Выручил.
...
Рейтинг: 0 / 0
Помогите, господа программисты
    #34307478
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда пожалуйста;)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите, господа программисты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]