ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Люди помогите ReadFile C++ ну не как .... |

22.02.2010, 20:21
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
Люди помогите ReadFile C++ ну не как ....
День добрый , вобщем появилась такая проблема , пытаюсь писать на чистом WinApi , надо прочитать файл вот собствено код , что не так
Код:
LPCSTR ReadFromFile()
{
HANDLE FileHandle;
DWORD R;
DWORD Size;
char Line[256];
FileHandle = CreateFileA("C:\\file.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Size = GetFileSize(FileHandle, &Size);
ReadFile(FileHandle, Line, Size, &R, NULL);
return Line;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(0,ReadFromFile(),"",0);
}
в файле текст 1234567 , а выводит хрень какуюта , разьясните как правльно заюзать функцию ReadFile чтобы прочитать текстовой файл
|
|
|

22.02.2010, 20:28
|
|
Познающий
Регистрация: 05.02.2010
Сообщений: 59
Провел на форуме: 360122
Репутация:
41
|
|
Код:
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hFile; // дескриптор файла
HANDLE hEndRead; // дескриптор события
OVERLAPPED ovl; // структура управления асинхронным доступом к файлу
// создаем события с автоматическим сбросом
hEndRead = CreateEvent(NULL, FALSE, FALSE, NULL);
if (hEndRead == NULL)
return GetLastError();
// инициализируем структуру OVERLAPPED
ovl.Offset = 0; // младшая часть смещения равна 0
ovl.OffsetHigh = 0; // старшая часть смещения равна 0
ovl.hEvent = hEndRead; // событие для оповещения завершения чтения
// открываем файл для чтения
hFile = CreateFile(
"C:\\C:\\file.txt", // имя файла
GENERIC_READ, // чтение из файла
FILE_SHARE_READ, // совместный доступ к файлу
NULL, // защиты нет
OPEN_EXISTING, // открываем существующий файл
FILE_FLAG_OVERLAPPED, // асинхронный ввод
NULL // шаблона нет
);
// проверяем на успешное открытие
if (hFile == INVALID_HANDLE_VALUE)
{
cerr << "Create file failed." << endl
<< "The last error code: " << GetLastError() << endl;
CloseHandle(hEndRead);
cout << "Press any key to finish.";
cin.get();
return 0;
}
// читаем данные из файла
for (;;)
{
DWORD dwBytesRead;
DWORD dwRet;
int n;
// читаем одну запись
if (!ReadFile(
hFile, // дескриптор файла
&n, // адрес буфера, куда читаем данные
sizeof(n), // количество читаемых байтов
&dwBytesRead, // количество прочитанных байтов
&ovl // чтение асинхронное
))
{
switch(dwRet = GetLastError())
{
case ERROR_IO_PENDING:
cout << "Read file pending." << endl;
break;
case ERROR_HANDLE_EOF:
cout << endl << "End of the file." << endl;
cout << "The file is read." << endl;
// закрываем дескрипторы
CloseHandle(hFile);
CloseHandle(hEndRead);
return 1;
default:
cout << "Read file failed." << endl
<< "The last error code: " << dwRet << endl;
// закрываем дескрипторы
CloseHandle(hFile);
CloseHandle(hEndRead);
return 0;
}
}
// ждем, пока завершится асинхронная операция чтения
WaitForSingleObject(hEndRead, INFINITE);
// печатаем число
cout << n << ' ';
// увеличивает смещение в файле
ovl.Offset += sizeof(n);
}
}
пример из буки одной, ненужное сам уберёшь, просто тут всё с комментами, тебе понятней чтобы
Последний раз редактировалось BastardFromHell; 22.02.2010 в 20:33..
|
|
|

22.02.2010, 20:36
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
а как прочитать символьный текст ?
|
|
|

22.02.2010, 20:41
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
проверил код выводит 875770417 , хотя в файле 1234567
|
|
|

22.02.2010, 20:41
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
а при чем тут символьный текст....
... когда в мессадж бокс вторым параметром ты должен передавать адреса буфера
где лежат считанные данные!!!!
ты же открыл Line ЛОКАЛЬНО..... при выходе из функции оана ПЕРЕСТАНЕТ СУЩЕСТВОВАТЬ!!!
Код:
char Line[256];
LPCSTR ReadFromFile()
{
HANDLE FileHandle;
DWORD R;
DWORD Size;
FileHandle = CreateFileA("C:\\file.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,F ILE_ATTRIBUTE_NORMAL,NULL);
Size = GetFileSize(FileHandle, &Size);
if(Size>255) Size=255;
ReadFile(FileHandle, Line, Size, &R, NULL);
*(Line+R)=0;
return Line;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(0,ReadFromFile(),"",0);
}
Последний раз редактировалось Delimiter; 22.02.2010 в 21:00..
|
|
|

22.02.2010, 20:59
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
Заюзал код , в мессейдж бокс выводит опять тоже самое что было в самом начале
|
|
|

22.02.2010, 21:04
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
скопируй .... и будет тебе счасте!
|
|
|

22.02.2010, 21:06
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
говорю же юзаю твой код , невыводит нечего
|
|
|

22.02.2010, 21:25
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
Delimiter big thanks разобрался
|
|
|

22.02.2010, 21:56
|
|
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме: 107509
Репутация:
6
|
|
вот так пральней
LPCSTR ReadFromFile(LPVOID Buff)
{
HANDLE FileHandle;
DWORD R;
DWORD Size;
FileHandle = CreateFileA("C:\\sys.txt",GENERIC_READ,FILE_SHARE_ READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );
Size = GetFileSize(FileHandle, &Size);
if(Size>255) Size=255;
ReadFile(FileHandle, Buff, Size, &R, NULL);
*(Line+R)=0;
CloseHandle(FileHandle);
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char Line[256];
ReadFromFile(Line);
MessageBox(0,Line,"",0);
}
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|