Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

WriteFile & ReadFile   Найти похожие ветки 

 
JJohn ©   (2005-09-16 02:45) [0]

столкнулся с проблемой WriteFile и ReadFile в Delphi (обязательно нужно через API)
не пойму, что не так?:

procedure TForm1.Button1Click(Sender: TObject);
var  ZapisanoBytes : Cardinal;
    hFile: Thandle;
    str:string;
begin
str:="123";
hFile:=CreateFile("C:\1.1", Generic_Write, 0, Nil, Create_Always, File_Attribute_Normal, 0);
WriteFile(hFile, str, Length(str), ZapisanoBytes, Nil);
 CloseHandle(hFile);
end;

В этом куске кода он сохраняет эти три символа странным образом: ¤нD

При считывании с файла совсем ничего не читается(
procedure TForm1.Button2Click(Sender: TObject);
var  ZapisanoBytes : Cardinal;
    hFile: Thandle;
    str:string;
begin
hFile:=CreateFile("C:\1.1", Generic_Read, 0, Nil, Create_Always, File_Attribute_Normal, 0);
ReadFile(hFile, str, Length(str)+10, ZapisanoBytes, Nil);
label1.Caption:=str;
 CloseHandle(hFile);
end;


 
Джо ©   (2005-09-16 03:07) [1]


procedure TForm1.Button1Click(Sender: TObject);
var
 ZapisanoBytes : Cardinal;
 hFile: Thandle;
 str:string;
begin
 str:="123";
 hFile:=CreateFile("C:\1.1", Generic_Write, 0, Nil, Create_Always, File_Attribute_Normal, 0);
 WriteFile(hFile, str[1], Length(str), ZapisanoBytes, Nil);
 CloseHandle(hFile);
end;


 
Джо ©   (2005-09-16 03:10) [2]

Чтение файла реализовано еще "хужее".
ReadFile вообще никакого понятие не имеет о том, что где-то у тебя какой-то там string. Ты ей передаешь просто адрес в памяти, в который она записывает прочитанные данные. И твоя забота - позаботится о том, чтобы там было достаточно места для размещения данных.


 
JJohn ©   (2005-09-16 13:06) [3]

спасибо за ответ......
у меня получилось получилось так:
WriteFile(hFile, PAnsiChar(str)^, Length(str), nWrited, nil);  :)


 
Джо ©   (2005-09-16 17:39) [4]


>  [3] JJohn ©   (16.09.05 13:06)
> у меня получилось получилось так:

А память для str выделил? Или все оставил как есть, кроме PAnsiChar(str)^? Вообще, в общем случае, не используй тут никаких string, запутаешься. Лучше сделай PChar с GetMem/FreeMem или динамический массив array of Char с SetLength...


 
JJohn ©   (2005-09-17 15:20) [5]

var str:string;
Джо, да, оставил все как есть...  отлично работает.....


 
Джо ©   (2005-09-17 17:28) [6]


>  [5] JJohn ©   (17.09.05 15:20)
> var str:string;
> Джо, да, оставил все как есть...  отлично работает.....

Код в JJohn ©   (16.09.05 02:45) не рабочий. Если он случайно заработал, это еще ни о чем не говорит.


 
Джо ©   (2005-09-17 17:35) [7]

Нужно так:
SetLength(str,Size); // установи нужный размер для строки, в которую будешь читать
ReadFile(hFile, @str[1], Size, ZapisanoBytes, Nil);



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
2-1130950152
Pasha L
2005-11-02 19:49
2005.11.20
EnumThreadWindows


3-1128580093
MVVD
2005-10-06 10:28
2005.11.20
Принтер и быстродействие


14-1130220523
ANB
2005-10-25 10:08
2005.11.20
Еще раз про защиту данных в СУБД


14-1130564953
Irmantukas
2005-10-29 09:49
2005.11.20
Bluetooth


3-1129092338
Anics
2005-10-12 08:45
2005.11.20
Кто-нибудь пробовал в TDBGrid устроить автонумерацию строк?