![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WriteFile & ReadFile [D6, WinXP]
JJohn © (2005-09-16 02:45:00)столкнулся с проблемой 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-17 17:35:00) [1]Нужно так:
SetLength(str,Size); // установи нужный размер для строки, в которую будешь читать
ReadFile(hFile, @str[1], Size, ZapisanoBytes, Nil);
Джо (2005-09-17 17:28:00) [2]
> [5] JJohn © (17.09.05 15:20)
> var str:string;
> Джо, да, оставил все как есть... отлично работает.....
Код в JJohn © (16.09.05 02:45) не рабочий. Если он случайно заработал, это еще ни о чем не говорит.
JJohn (2005-09-17 15:20:00) [3]var str:string;
Джо, да, оставил все как есть... отлично работает.....
Джо (2005-09-16 17:39:00) [4]
> [3] JJohn © (16.09.05 13:06)
> у меня получилось получилось так:
А память для str выделил? Или все оставил как есть, кроме PAnsiChar(str)^? Вообще, в общем случае, не используй тут никаких string, запутаешься. Лучше сделай PChar с GetMem/FreeMem или динамический массив array of Char с SetLength...
JJohn (2005-09-16 13:06:00) [5]спасибо за ответ......
у меня получилось получилось так:
WriteFile(hFile, PAnsiChar(str)^, Length(str), nWrited, nil); :)
Джо (2005-09-16 03:10:00) [6]Чтение файла реализовано еще "хужее".
ReadFile вообще никакого понятие не имеет о том, что где-то у тебя какой-то там string. Ты ей передаешь просто адрес в памяти, в который она записывает прочитанные данные. И твоя забота - позаботится о том, чтобы там было достаточно места для размещения данных.
Джо (2005-09-16 03:07:00) [7]
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;