Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WirteFile


Автор: Proxin 5.6.2010, 22:40
Как правильно работать с WriteFile? Проблема в том, что другими методами (savetofile и через textfile) записать не получается - выдаёт ошибку (файл занят другим приложением). Пробую так, но валится на строке createevent.

Код

var h:thandle;nob:cardinal;s:string;ovls:poverlapped;
begin
h:=createfile(pchar('C:\writer.txt'),generic_write,file_share_write,nil,create_always,file_attribute_normal or file_flag_overlapped,0);
s:=somestringlist.text;
ovls.hevent:=createevent(nil,false,false,nil);
writefile(h,s[1],length(s),nob,ovls);
closehandle(h);
end;

upd: вроде решил проблему. но возник следующий вопрос: как очистить содержиое файла, не удаляя его?

Автор: Демо 6.6.2010, 14:10
Цитата(Proxin @  5.6.2010,  22:40 Найти цитируемый пост)
upd: вроде решил проблему. но возник следующий вопрос: как очистить содержиое файла, не удаляя его?


См. SetFilePointer & SetEndOfFile

Автор: Proxin 6.6.2010, 14:12
Спасибо, с этим разобрался. А почему может возникать eacsessviolation при createevent?

Автор: Демо 6.6.2010, 14:53
Цитата(Proxin @  6.6.2010,  14:12 Найти цитируемый пост)
Спасибо, с этим разобрался. А почему может возникать eacsessviolation при createevent?


Потому что ovls - указатель на структуру, для которой не выделена память-)

Автор: Proxin 6.6.2010, 15:06
а сколько выделять памяти на неё?

Автор: Демо 6.6.2010, 15:16
Цитата(Proxin @  6.6.2010,  15:06 Найти цитируемый пост)
а сколько выделять памяти на неё?


Код

New(ovls);

Автор: Proxin 6.6.2010, 15:23
работает. спасибо.

Автор: Демо 6.6.2010, 15:25
Цитата(Proxin @  6.6.2010,  15:23 Найти цитируемый пост)
работает. спасибо.


Не забудь потом выполнить Dispose(ovls);

Автор: CodeMonkey 6.6.2010, 15:57
Цитата(Proxin @  6.6.2010,  16:06 Найти цитируемый пост)
а сколько выделять памяти на неё? 

Не выделять вовсе.
Код
var
  ovls: TOverlapped;
begin
  ...
  ovls.hEvent := CreateEvent(...);
  WriteFile(..., @ovls);   


Добавлено через 50 секунд
http://www.transl-gunsmoker.ru/2009/09/blog-post.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)