Поиск по сайту
Форумы 
Реклама
|
Страницы сообщения: [1] [2] | Просмотров - 7983
| функция WriteFile, запись информации в файл. | Добавить этот топик в закладки » | | RSS-лента ответов » |
|
|
HACK_ER

Platinum Member | # | Сообщение добавлено 28.08.2010 19:09:01 Всем ку)
написал исходник:
HANDLE myFile;
myFile = CreateFile("G:\\Users\\pr1kal1st\\tfilex2.txt", GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
unsigned long rEal;
WriteFile(myFile,"gfd", 3,&rEal , NULL);
Работает нормально, но только я не пойму одного. В 3-ем параметре обязательно нужно записать, сколько байтов нужно записать файл, ну а откуда я узнаю сколько байт мне придётся записать, если у меня будет, допустим, текстовый редактор?. Как можно более автоматизировать процесс? | | Сказать спасибо Ответить Цитировать |
| _ruzmaz_
Gold Member | # | Сообщение добавлено 28.08.2010 20:31:58 размер текста в текстовом поле на момент обработки нажатия на кнопку "Save" тебе же будет известен | | Сказать спасибо Ответить Цитировать |
| HACK_ER

Platinum Member | # | Сообщение добавлено 28.08.2010 20:58:20 И как узнать этот размер? | | Сказать спасибо Ответить Цитировать |
| _ruzmaz_
Gold Member | # | Сообщение добавлено 28.08.2010 21:02:51 если пишешь на api, то через посылку сообщения WM_GETTEXTLENGTH (через SendMessage) окну (полю с текстом) | | Сказать спасибо Ответить Цитировать |
| tvb_19
Advanced Member | # | Сообщение добавлено 28.08.2010 22:05:24 В Delphi и C# есть функция SizeOf(), которая возвращает число байтов, занятых переменной, переданной функции в качестве параметра. Кажется, такая есть и в C++.
Если пишете на билдере, длину текста можно узнать, например:
Length(Memo1->Lines->Text); | | Сказать спасибо Ответить Цитировать |
| HACK_ER

Platinum Member | # | Сообщение добавлено 28.08.2010 22:36:55 Пишет след ошибки (((
Checking project dependencies...
Compiling Project2.cbproj (Debug configuration)
[BCC32 Error] Unit2.cpp(25): E2062 Invalid indirection
Full parser context
Unit2.cpp(20): parsing: void _fastcall TForm2::Button1Click(TObject *)
[BCC32 Error] Unit2.cpp(25): E2034 Cannot convert 'UnicodeString' to 'const void *'
Full parser context
Unit2.cpp(20): parsing: void _fastcall TForm2::Button1Click(TObject *)
[BCC32 Error] Unit2.cpp(25): E2342 Type mismatch in parameter 'lpBuffer' (wanted 'const void *', got 'UnicodeString')
Full parser context
Unit2.cpp(20): parsing: void _fastcall TForm2::Button1Click(TObject *)
Failed
Elapsed time: 00:00:00.4
Параметры функции поменял так:
WriteFile(myFile,Edit1->Text,Edit1->Text.Length() , *rEal , NULL); | | Сказать спасибо Ответить Цитировать |
| _ruzmaz_
Gold Member | # | Сообщение добавлено 28.08.2010 23:13:34 Отредактировано 28.08.2010 23:14:12 by _ruzmaz_ можно так, но записано будет в utf-16
WriteFile(myFile, Edit1->Text.c_bstr, Edit1->Text.Length()*2 , &rEal , NULL);
| | Сказать спасибо Ответить Цитировать |
| HACK_ER

Platinum Member | # | Сообщение добавлено 29.08.2010 00:25:13 Отредактировано 29.08.2010 00:28:35 by HACK_ER А в Unicode как записать всё-таки? Вернее так, чтобы на русском тоже норм читалось.кста, переменной c_bstr вообще не оказалось в списке, но я заюзал c_str. (компилятор - C++Builder 2010) | | Сказать спасибо Ответить Цитировать |
| _ruzmaz_
Gold Member | # | Сообщение добавлено 29.08.2010 00:55:48 Отредактировано 29.08.2010 01:00:52 by _ruzmaz_ HACK_ER
А в Unicode как записать всё-таки? Вернее так, чтобы на русском тоже норм читалось
в unicode и будет записано, должно читаться ... хотя у UnicodeString есть метод CodePage(), возможно есть нюансы в плане кодировки, точно не знаю 2010 билдер не пробовал еще
HACK_ER
переменной c_bstr вообще не оказалось в списке, но я заюзал c_str
да, хоть какое-то описание класса я чуть позже нашел)) метод c_str() вернет указатель на w_char, то есть юникод строку; метод c_bstr() есть в WideString, я предположил что там есть такой же) | | Сказать спасибо Ответить Цитировать |
| HACK_ER

Platinum Member | # | Сообщение добавлено 29.08.2010 03:11:53 Отредактировано 29.08.2010 03:12:45 by HACK_ER Ладно, допустим с этим разобрались. Теперь я хочу сделать следующее. Чтобы программа получала, к примеру, адрес windows-каталога, и записывала в файл адрес данного каталога. Я решил сделать это так для начала:
char winDir[256];
GetWindowsDirectory(winDir, 256);
for (int i = 0; ; i++) {
WriteFile(myFile, winDir[i], 1 , &rEal , NULL);
if (winDir[i] == '\0') {
break;
}
Но данный код, к сожалению, не компилируется... | | Сказать спасибо Ответить Цитировать |
| Страницы сообщения: [1] [2] |