ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Люди помогите ReadFile C++ ну не как ....
  #1  
Старый 22.02.2010, 20:21
Fl0dER
Познающий
Регистрация: 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 чтобы прочитать текстовой файл
 
Ответить с цитированием

  #2  
Старый 22.02.2010, 20:28
BastardFromHell
Познающий
Регистрация: 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..
 
Ответить с цитированием

  #3  
Старый 22.02.2010, 20:36
Fl0dER
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме:
107509

Репутация: 6
По умолчанию

а как прочитать символьный текст ?
 
Ответить с цитированием

  #4  
Старый 22.02.2010, 20:41
Fl0dER
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме:
107509

Репутация: 6
По умолчанию

проверил код выводит 875770417 , хотя в файле 1234567
 
Ответить с цитированием

  #5  
Старый 22.02.2010, 20:41
Delimiter
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..
 
Ответить с цитированием

  #6  
Старый 22.02.2010, 20:59
Fl0dER
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме:
107509

Репутация: 6
По умолчанию

Заюзал код , в мессейдж бокс выводит опять тоже самое что было в самом начале
 
Ответить с цитированием

  #7  
Старый 22.02.2010, 21:04
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

скопируй .... и будет тебе счасте!
 
Ответить с цитированием

  #8  
Старый 22.02.2010, 21:06
Fl0dER
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме:
107509

Репутация: 6
По умолчанию

говорю же юзаю твой код , невыводит нечего
 
Ответить с цитированием

  #9  
Старый 22.02.2010, 21:25
Fl0dER
Познающий
Регистрация: 22.12.2008
Сообщений: 82
Провел на форуме:
107509

Репутация: 6
По умолчанию

Delimiter big thanks разобрался
 
Ответить с цитированием

  #10  
Старый 22.02.2010, 21:56
Fl0dER
Познающий
Регистрация: 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);

}
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что Ваш ребенок растет хакером? PHOEN_i_X Болталка 148 13.06.2010 18:02
забавные рассуждения. Cthulchu Болталка 14 18.12.2009 16:16



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ