Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WriteFile и ReadFile

9.6K
16 сентября 2005 года
JJohn
15 / / 16.09.2005
столкнулся с проблемой 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;
10
16 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by JJohn
В этом куске кода он сохраняет эти три символа странным образом: ¤нD


Немудрено. Ведь AnsiString (а именно в него превращается переменная, описываемая ключевым словом string) - это указатель. Тебе просто повезло, что тестовая строка оказалась короткой, всего 3 символа. Больше четырех - стало бы вылезать исключение. Чтобы не зависеть от типа, как правило, пишут так:

 
Код:
WriteFile(hFile, str[1], Length(str), ZapisanoBytes, Nil);
9.6K
16 сентября 2005 года
JJohn
15 / / 16.09.2005
Цитата:
Originally posted by Freeman
Немудрено. Ведь AnsiString (а именно в него превращается переменная, описываемая ключевым словом string) - это указатель. Тебе просто повезло, что тестовая строка оказалась короткой, всего 3 символа. Больше четырех - стало бы вылезать исключение. Чтобы не зависеть от типа, как правило, пишут так:
 
Код:
WriteFile(hFile, str[1], Length(str), ZapisanoBytes, Nil);



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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог