Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2012, 17:12
eastwoodknight eastwoodknight вне форума
Прохожий
 
Регистрация: 31.03.2012
Сообщения: 3
Репутация: 10
Вопрос открытие файла с помощью win api

Требуется открыть бинарный файл и заполнить массив переменных типа word. Вот мой код:
Код:
var
 OpenDialog  :TOpenDialog;
  kt:Cardinal;
  filehandle: THandle;
  file_inf: TOFStruct;
  buf: array of word;
begin
  openDialog := TOpenDialog.Create(self);
  openDialog := TOpenDialog.Create(self);
  if openDialog.Execute
  then begin
     filehandle :=   OpenFile(PChar(openDialog.FileName),file_inf,OF_READWRITE);
     size :=  GetFileSize(filehandle,nil);
     SetLength(buf,size div 2 + 1 );
     ReadFile(filehandle,buf,size,kt,nil);
     CloseHandle(FileHandle);
  end;
end;
Админ: Пользуемся тегами для оформления кода!

Вопрос: почему массив остается незаполненным?

Последний раз редактировалось Admin, 31.03.2012 в 17:15.
Ответить с цитированием
  #2  
Старый 31.03.2012, 17:45
PS11011010 PS11011010 вне форума
Новичок
 
Регистрация: 30.03.2012
Сообщения: 98
Репутация: 282
По умолчанию

Нужно использовать WriteFile вместо ReadFile.
Ответить с цитированием
  #3  
Старый 31.03.2012, 17:46
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

не, нужно передавать указатель на нулевой элемент @buf[0]
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
eastwoodknight (03.04.2012)
  #4  
Старый 31.03.2012, 18:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Лучше использовать CreateFile(...)
Цитата:
Обратите внимание! на то, что эта функция предусматривается только для совместимости с 16-разрядными версиями Windows. Новые приложения должны использовать функцию CreateFile.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
eastwoodknight (03.04.2012)
  #5  
Старый 31.03.2012, 21:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Весь прикол кода ТС в том, что ему вообще не нужны API-ные команды. После применения:
Код:
  openDialog := TOpenDialog.Create(self);

их ценность падает до нуля.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 31.03.2012, 21:39
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Код:
var
  OpenDialog  :TOpenDialog;
  kt:Cardinal;
  filehandle: THandle;
  buf: array of word;
begin
  openDialog := TOpenDialog.Create(self);
  if openDialog.Execute
  then begin
     filehandle :=CreateFile(pChar(openDialog.FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
     size :=  (GetFileSize(filehandle,nil) div SizeOf(word))+1;
     SetLength(buf,size);
     ReadFile(filehandle,buf[0],size,kt,nil);
     CloseHandle(FileHandle);
  end;
  openDialog.Free;
end;
а почему бы не использовать TFileStream ?
и для помощи

Последний раз редактировалось cotseec, 31.03.2012 в 21:43.
Ответить с цитированием
Этот пользователь сказал Спасибо cotseec за это полезное сообщение:
eastwoodknight (03.04.2012)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025