WriteFile и ReadFile
не пойму, что не так?:
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;
Цитата:
Originally posted by JJohn
В этом куске кода он сохраняет эти три символа странным образом: ¤нD
В этом куске кода он сохраняет эти три символа странным образом: ¤нD
Немудрено. Ведь AnsiString (а именно в него превращается переменная, описываемая ключевым словом string) - это указатель. Тебе просто повезло, что тестовая строка оказалась короткой, всего 3 символа. Больше четырех - стало бы вылезать исключение. Чтобы не зависеть от типа, как правило, пишут так:
Код:
WriteFile(hFile, str[1], Length(str), ZapisanoBytes, Nil);
Цитата:
Originally posted by Freeman
Немудрено. Ведь AnsiString (а именно в него превращается переменная, описываемая ключевым словом string) - это указатель. Тебе просто повезло, что тестовая строка оказалась короткой, всего 3 символа. Больше четырех - стало бы вылезать исключение. Чтобы не зависеть от типа, как правило, пишут так:
Немудрено. Ведь AnsiString (а именно в него превращается переменная, описываемая ключевым словом string) - это указатель. Тебе просто повезло, что тестовая строка оказалась короткой, всего 3 символа. Больше четырех - стало бы вылезать исключение. Чтобы не зависеть от типа, как правило, пишут так:
Код:
WriteFile(hFile, str[1], Length(str), ZapisanoBytes, Nil);
спасибо за ответ......
у меня получилось получилось так:
WriteFile(hFile, PAnsiChar(str)^, Length(str), nWrited, nil); :)