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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 19:07   #1
WolfKatana
 
Регистрация: 19.03.2013
Сообщений: 3
Восклицание WinApi функции c++ CreateFile ReadFile WriteFile GetOpenFileName GetSaveFileName

Хочу функцией GetopenFileName получить имя файла, потом считать данные с этого файла и записать в другой файл имя которого я указываю при вызове функции GetSaveFileName.

Имя файла я получаю в
char* filename[MAX_PATH]

Помогите разобраться пожалуйста.
WolfKatana вне форума Ответить с цитированием
Старый 19.03.2013, 23:51   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

ну покажите код что ли... разберемся...
counter вне форума Ответить с цитированием
Старый 20.03.2013, 02:31   #3
WolfKatana
 
Регистрация: 19.03.2013
Сообщений: 3
По умолчанию

Код:
char* readbuffer = new char;
DWORD BytesRead;
OPENFILENAME OpenFileName; 
OPENFILENAME SaveFileName;
static char PathToFile[255]; 
static char savefilename[255]; 

ZeroMemory(&SaveFileName, sizeof(OPENFILENAME));
	SaveFileName.lStructSize = OPENFILENAME_SIZE_VERSION_400A;
	SaveFileName.hwndOwner = hWnd;
	SaveFileName.lpstrFile = (LPWSTR)savefilename; файла
	SaveFileName.nMaxFile = MAX_PATH;
	SaveFileName.lpstrFilter = _T("Всі\0*.*\0Текстовий документ\0*.TXT\0Файли програм\0*.EXE\0");
	SaveFileName.nFilterIndex = 1; 
	SaveFileName.lpstrFileTitle = NULL; 
	SaveFileName.nMaxFileTitle = 0;
	SaveFileName.lpstrInitialDir = NULL; 
	SaveFileName.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR;

OpenFileName.lStructSize = sizeof(OpenFileName);
	OpenFileName.hwndOwner = hWnd
	OpenFileName.Flags = OFN_HIDEREADONLY;	
	OpenFileName.hInstance = This;	
	OpenFileName.lpstrFilter = _T("Текстовый файл(*.txt)\0*.txt\0\0");	
	OpenFileName.lpstrCustomFilter = NULL;	
	OpenFileName.nMaxCustFilter = 0;	
	OpenFileName.nFilterIndex = 1;	
	OpenFileName.lpstrFile = (LPWSTR)PathToFile;
	OpenFileName.nMaxFile = 255;	
	OpenFileName.lpstrFileTitle = NULL;	
	OpenFileName.lpstrInitialDir = NULL;	
	OpenFileName.lpstrTitle = _T("Открыть...");	
	OpenFileName.lpstrDefExt = _T("txt");

GetSaveFileName(&SaveFileName);
GetOpenFileName(&OpenFileName);

HANDLE hFile = CreateFile((LPCWSTR)PathToFile,GENERICK_READ,0,NULL,OPEN_EXISTING,NULL,NULL);

HANDLE hFileTwo
BOOL readFile = ReadFile(hFile,readbuffer,sizeof(readbuffer),&BytesRead,NULL);

BOOL writetofile = WriteFile(hFileTwo,readbuffer,sizeof(readbuffer),&BytesRead,NULL);

Последний раз редактировалось Stilet; 20.03.2013 в 09:20.
WolfKatana вне форума Ответить с цитированием
Старый 20.03.2013, 13:32   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Явный привод типов к LPWSTR наводит на мысль, что используются char строки в UNICODE проекте. Уберите все LPWSTR/LPCWSTR и используйте TCHAR вместо char.

Копировать файл лучше циклично, т.е. пока не закончились данные...
Для особо ленивых - CopyFile()
waleri вне форума Ответить с цитированием
Старый 21.03.2013, 21:42   #5
WolfKatana
 
Регистрация: 19.03.2013
Сообщений: 3
Радость

Цитата:
Сообщение от waleri Посмотреть сообщение
Явный привод типов к LPWSTR наводит на мысль, что используются char строки в UNICODE проекте. Уберите все LPWSTR/LPCWSTR и используйте TCHAR вместо char.

Копировать файл лучше циклично, т.е. пока не закончились данные...
Для особо ленивых - CopyFile()
for (;
{
DWORD dwBytesRead;
DWORD dwRet;
TCHAR* n = new TCHAR;

if (!ReadFile(CreateMyFile,&n,sizeof(n ),&dwBytesRead,&ovl))
{
switch(dwRet = GetLastError())
{
case ERROR_HANDLE_EOF:
MessageBox(NULL,_T("кінець читання файлу"),_T("діалогове вікно"),MB_OK );

CloseHandle(CreateMyFile);
CloseHandle(hEndRead);
return 1;
default:
MessageBox(NULL,_T("помилка запису файла"),_T("діалогове вікно"),MB_OK );
MessageBox(NULL,(LPCWSTR)dwRet,_T(" діалогове вікно"),MB_OK );
CloseHandle(CreateMyFile);
CloseHandle(hEndRead);

return 0;
}
}
WaitForSingleObject(hEndRead, INFINITE);
ovl.Offset += sizeof(n);
}

Так нормально?
WolfKatana вне форума Ответить с цитированием
Старый 21.03.2013, 21:54   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Цитата:
Сообщение от WolfKatana Посмотреть сообщение

Так нормально?
Если в теги поместить .....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] ReadFile/WriteFile hvz- Помощь студентам 17 16.01.2013 18:18
ReadFile/WriteFile - нужен совет. Linnk Win Api 1 07.08.2012 15:57
QFileDialog::getSaveFileName выбирает не того пользователя PinkPink Qt и кроссплатформенное программирование С/С++ 10 27.04.2012 19:47
Использование динамического массива в функции ReadFile (WinAPI). Korrado Помощь студентам 7 29.11.2009 13:38
WinAPI функции AidarBik Win Api 3 16.06.2007 17:03