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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 21:53   #1
Zulus
Новичок
Джуниор
 
Регистрация: 20.02.2011
Сообщений: 2
По умолчанию асинхронная работа с файлами

вообщем дали лабу асинхронная/синхронная работа с файлами, нужно с командной строки скопировать все фалы в папку проекта отображая каким либо образом процесс копирования фалов.Я написал вот это
Код:
{
	HANDLE FileIn[64],FileOut[64];
	DWORD nIn=0,nOut=0;
	OVERLAPPED Read;
	  Read.Offset = 0;
  Read.OffsetHigh = 0;
  Read.hEvent = NULL;
    OVERLAPPED Write;
	 Write.Offset = 0;
  Write.OffsetHigh = 0;
  Write.hEvent = NULL;

	long z,factor=1,SizeA,i;
	char Buffer [64][BUF_SIZE];
	for(i=1;argv[i];i++)
	{
		FileIn[i-1] = CreateFile(argv[i], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
		FileOut[i-1] = CreateFile((LPCSTR)GetFileName(argv[i]), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_OVERLAPPED, NULL);
	}
	for(z=1;;factor++)
	{
		for(i=1;argv[i];i++)
		{
			if(FileOut[i-1]==NULL)
				continue;

		 ReadFile(FileIn[i-1], Buffer[i-1], BUF_SIZE, &nIn,&Read);

		 GetOverlappedResult(FileIn[i-1],&Read,&nIn,TRUE);

		 WriteFile(FileOut[i-1], Buffer[i-1], nIn, &nOut, &Write);

		 GetOverlappedResult(FileOut[i-1],&Write,&nOut,TRUE);
		 z=100*GetFileSize(FileOut[i-1],NULL)/GetFileSize(FileIn[i-1],NULL);
		 printf("\nScopirovano %d KB or %i %",GetFileSize(FileOut[i-1],NULL),z);
		 if (GetFileSize(FileOut[i-1],NULL)==GetFileSize(FileIn[i-1],NULL))
		 {
			 CloseHandle(FileOut[i-1]);
			 FileOut[i-1]=NULL;
			 CloseHandle(FileIn[i-1]);
			 FileIn[i-1]=NULL;
		 }
		}	
	}
	ExitThread;
	return 0;
}
Проблема заключается в том , что оно копирует файлы только меньше самого буфера. Т.е. после копирования не переходит дальше по файлу.делал waitforsingeloject после чтения и записи , тогда вообще не копирует!Помогите нужно срочно .Спасибо что прочитали )
Zulus вне форума Ответить с цитированием
Старый 07.10.2012, 23:00   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Надо сделать копирование в цикле. В OVERLAPPED есть Offset и OffsetHigh, куда надо прописать смещение в файле для считывания записи, иначе будет копировать одно и тоже
waleri вне форума Ответить с цитированием
Старый 08.10.2012, 19:35   #3
Zulus
Новичок
Джуниор
 
Регистрация: 20.02.2011
Сообщений: 2
По умолчанию

Благодарю ), я вроде это делал , и вылетала ошибка ,но оказалось и правда дела в этом ), я думал как в синхронном само двигается
Zulus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Асинхронная загрузка скриптов ekvador JavaScript, Ajax 0 27.01.2012 15:12
Асинхронная загрузка Julitan JavaScript, Ajax 2 18.08.2011 16:32
Асинхронная обработка принятых данных от порта osandr Общие вопросы Delphi 3 02.06.2010 09:32
Асинхронная передача данных eda Microsoft Office Excel 4 17.08.2009 14:16
Работа с файлами DM_bite Помощь студентам 4 20.09.2008 16:52