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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2012, 20:48   #1
Linnk
 
Регистрация: 05.10.2008
Сообщений: 6
По умолчанию ReadFile/WriteFile - нужен совет.

Нужно прочитать 4 байта и при условии что что данные в них возможно
Записать как 1 байт X в степени 4 и 2 байт остаток. (при условии что остаток влезет в байт)
Где X корень из 4.

Что то я делаю неверно(((
Возможно проблема в типах данных ?

Код:

#include <iostream>
#include <windows.h>
using namespace std;

short NotDegeer (int number);
int Balance (short total,int number);

int main(void)
{
HANDLE hFile;
HANDLE hFileArchive;
DWORD inBuffer;
BYTE inBufferByte1, inBufferByte2;
DWORD numbayte = 4;
DWORD nbayte = 1;
bool reedfile;
bool writefile;
char lpFileName[256];
char lpFileNameSave[256];
DWORD number;  
int balance;
short degeer;

cout << "Enter file name please:\n";
cin >> lpFileName;

hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, 
	OPEN_EXISTING,	FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE) 
{ 
    printf("\nCould not open file (error %d)\n", GetLastError());
    Sleep(30000);
	return 0;
}

cout << "\nEnter file - save name please:\n ";
cin >> lpFileNameSave;

hFileArchive = CreateFile(lpFileNameSave, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 
   FILE_ATTRIBUTE_NORMAL, NULL);                 

if (hFile == INVALID_HANDLE_VALUE) 
{ 
    printf("\nCould not open file (error %d)\n", GetLastError());
    Sleep(30000);
	return 0;
}

do
{	

reedfile = ReadFile(hFile, &inBuffer, numbayte, &numbayte, NULL);
number = inBuffer;

degeer = NotDegeer(number);
balance = Balance(degeer, number);


if(balance <= 255 && degeer!=0)
{	
	


	inBufferByte1 = degeer;
	inBufferByte2 = balance;
	
	writefile = WriteFile(hFileArchive, &inBufferByte1, nbayte, &nbayte, NULL);
	writefile = WriteFile(hFileArchive, &inBufferByte2, nbayte, &nbayte, NULL);
	
}
else 
{
writefile = WriteFile(hFileArchive, &inBuffer, numbayte, &numbayte, NULL);
}

}
while(reedfile && numbayte != 0);

reedfile = CloseHandle(hFile);
writefile = CloseHandle(hFileArchive);

if(hFile && hFileArchive)
{
cout << "\nAll operations are completed successfully!";
}


Sleep(300000);
 
 return 0;
}

// Фунция вычесления корня 4 степени из заданного числа.
short NotDegeer (int number)
{
 int  x=0;
 int c;
 short total;

if(number >= 16)
{
do
{
x++;
c=x*x*x*x;
}
while(c <= number);
total = x-1; 
}
else
{ return 0;}

return total;
}
// Фунция вычесления остатка

int Balance (short total, int number)
{
int balance_B;
if(number > 0)
{
balance_B = number - (total*total*total*total);
return balance_B;
}

return 0;
}

Последний раз редактировалось Stilet; 07.08.2012 в 18:06.
Linnk вне форума Ответить с цитированием
Старый 07.08.2012, 15:57   #2
Linnk
 
Регистрация: 05.10.2008
Сообщений: 6
По умолчанию

может нужно применить асинхронный ввод-вывод ?
Linnk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен совет stenl1 Компьютерное железо 8 29.01.2011 21:35
Нужен совет, просто совет kardinal94 Общие вопросы Delphi 7 16.12.2010 22:16
Нужен совет vpersov Общие вопросы Delphi 1 29.11.2010 14:54
Нужен совет prikolist Общие вопросы C/C++ 1 05.07.2009 15:40
Нужен совет Михаил Юрьевич Общие вопросы Delphi 2 07.06.2008 13:59