Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.061 c
2-1130933037
~SaM~
2005-11-02 15:03
2005.11.20
Как сделать так, что бы окно программы было поверх ВСЕХ окон?


1-1130335109
alex870
2005-10-26 17:58
2005.11.20
Поиск в TreeView


8-1119933315
analyzer
2005-06-28 08:35
2005.11.20
Распознавание изображений


1-1130336571
Суслик
2005-10-26 18:22
2005.11.20
Вопрос про mouseUp


2-1131195551
WebSQLNeeder
2005-11-05 15:59
2005.11.20
Средствами Паскаль определить существует ли фаил.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский