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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2012, 19:22
Аватар для Kpyc
Kpyc Kpyc вне форума
Новичок
 
Регистрация: 05.05.2011
Сообщения: 75
Версия Delphi: Turbo Delphi
Репутация: 11
Вопрос Запись в файл

Открываю файл
Код:
hFile := OpenFile('log.txt', info, GENERIC_WRITE or OF_SHARE_DENY_NONE);
И пытаюсь записать в него
Код:
OK := writefile(hFile, temp, length(temp), bw, 0);
Не фурычит, в чем подвох?
Полный код
Код:
program Win1;

uses
  Windows,
  Messages, SysUtils;

var
  WndClass: TWndClass;
  szAppName: PChar;
  WinHandle: hwnd;
  info: ofstruct;
  bw: cardinal;
  hFile: THandle;
  Msg: TMsg;
  temp: char = 'C';
  ok: boolean;

function MyWndProc(hWnd: HWND; Msg: UINT;
  wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var
  i: Integer;

begin
  case Msg of
    WM_DESTROY:
    begin
      PostQuitMessage(0);
      Result := 0;
    end;

    WM_KEYDOWN:
    begin
      OK := writefile(hFile, temp, length(temp), bw, 0);
      Result := DefWindowProc(hWnd, Msg, wParam, lParam);
    end

  else
    Result := DefWindowProc(hWnd, Msg, wParam, lParam);
  end;
end;

begin
  szAppName := 'Hello windows.';
  WndClass.style := CS_HREDRAW or CS_VREDRAW;
  WndClass.lpfnWndProc := @MyWndProc;
  WndClass.cbClsExtra := 0;
  WndClass.cbWndExtra := 0;
  WndClass.hInstance := hInstance;
  WndClass.hIcon := LoadIcon(hInstance, IDI_APPLICATION);
  WndClass.hCursor := LoadCursor(hInstance, IDC_ARROW);
  WndClass.hbrBackground := CreateSolidBrush($FFFFFF);
  WndClass.lpszMenuName := nil;
  WndClass.lpszClassName := szAppName;
  RegisterClass(WndClass);
  WinHandle := CreateWindow(WndClass.lpszClassName, 'The Hello Program',
                                                    WS_OVERLAPPEDWINDOW,
                                                    CW_USEDEFAULT,
                                                    CW_USEDEFAULT,
                                                    CW_USEDEFAULT,
                                                    CW_USEDEFAULT,
                                                    0,
                                                    0,
                                                    hInstance,
                                                    nil);
  ShowWindow(WinHandle, SW_SHOW);
  UpdateWindow(WinHandle);
  hFile := OpenFile('log.txt', info, GENERIC_WRITE or OF_SHARE_DENY_NONE);

  while GetMessage(Msg, 0, 0, 0) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end.
Ответить с цитированием
  #2  
Старый 22.05.2012, 19:43
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Функции OpenFile оставлены для совместимости, лучше использовать CreateFile. Тогда файл закроется через CloseHandle и изменения будут сброшены

Последний раз редактировалось ChinYan, 22.05.2012 в 19:48.
Ответить с цитированием
Этот пользователь сказал Спасибо ChinYan за это полезное сообщение:
Kpyc (22.05.2012)
  #3  
Старый 10.10.2012, 14:39
Аватар для kovalev
kovalev kovalev вне форума
Прохожий
 
Регистрация: 07.10.2012
Сообщения: 2
Репутация: 10
По умолчанию

Вот так еще можно:

Код:
function SaveTextToFile(Filename: string; Text: string): Boolean;
var
  f: HFILE;
  Size: DWORD;
begin
  Size := Length(Text);
  f := _lopen(PChar(Filename), OF_READWRITE);
  _llseek(f, 0, FILE_END);
  _lwrite(f, @Text[1], Size);
  _lclose(f);
  Result := True
end;
Ответить с цитированием
  #4  
Старый 10.10.2012, 14:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от kovalev
Вот так еще можно:

Код:
function SaveTextToFile(Filename: string; Text: string): Boolean;
var
  f: HFILE;
  Size: DWORD;
begin
  Size := Length(Text);
  f := _lopen(PChar(Filename), OF_READWRITE);
  _llseek(f, 0, FILE_END);
  _lwrite(f, @Text[1], Size);
  _lclose(f);
  Result := True
end;
эти функции тоже оставлены для совместимости с 16-битной версией Windows.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 14.10.2012, 14:22
Аватар для kovalev
kovalev kovalev вне форума
Прохожий
 
Регистрация: 07.10.2012
Сообщения: 2
Репутация: 10
По умолчанию

Ну и хорошо, что оставлены. Это всегда работает.
Ответить с цитированием
  #6  
Старый 14.10.2012, 21:14
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну-ну надейся, и не обижайся, когда в следующей версии Винды вдруг перестанет работать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter