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

Ваш аккаунт

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

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

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

Запись в файл

22K
12 ноября 2006 года
Hot-Dog
4 / / 12.11.2006
Здравствуйте! Никак не получается организовать запись в файл. Всё получается, если использовать потоки, а вот с помощью функций FileOpen(), FileWrite() в файл записывается в бинарном коде. Догадываюсь, что дело во втором параметре функции FileWrite(iFileHandle, &m, 4);
Да, вот кусок кода. Подскажите, пожалуйста, в чём проблема. Спасибо!
 
Код:
int m;
int iFileHandle;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
m=StrToInt(Edit1->Text);
iFileHandle = FileOpen("file.text", fmOpenWrite);
FileWrite(iFileHandle, &m, 4);
FileClose(iFileHandle);
}
294
13 ноября 2006 года
Plisteron
982 / / 29.08.2003
Всё правильно, ты его просишь записать в файл 32-разрядное целое, он это делает. Если хочется десятичное число в тексовом виде, надо
 
Код:
char buf[32];
int m;
int iFileHandle;

m=StrToInt(Edit1->Text);
iFileHandle = FileOpen("file.text", fmOpenWrite);
sprintf(buf, "%d", m);
FileWrite(iFileHandle, buf, strlen(buf));
FileClose(iFileHandle);

Или проще
 
Код:
int iFileHandle = FileOpen("file.text", fmOpenWrite);
FileWrite(iFileHandle, Edit1->Text, Edit1->Text.Length());
FileClose(iFileHandle);
22K
13 ноября 2006 года
Hot-Dog
4 / / 12.11.2006
Plisteron,
спасибо! Но почему-то в первом случае записывыется в файл 4198400, независимо от значения данных (в моём случае - это число от нуля до 100);
а во втором ошибка в функции
 
Код:
FileWrite(iFileHandle, Edit1->Text, Edit1->Text.Length());

где указатель на данные, второй параметр, является AnsiString, а не const void, как требует синтаксис функции
20K
13 ноября 2006 года
kossak
20 / / 10.11.2006
Если файл небольшой (до 4 Гб) лучше делать так
(А если большой то тем более..):

HANDLE hCFGFILE = CreateFile(CONFIG_FILE_NAME.c_str(), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
dwCFG_FILE_SIZE = GetFileSize(hCFGFILE,NULL);
if(hCFGFILE == INVALID_HANDLE_VALUE)
return ERR_LOAD_CFG_FILE;
HANDLE hCFGFILEMAP = CreateFileMapping(hCFGFILE, NULL, PAGE_WRITECOPY, 0, 0, NULL);
pbCFGFILE = (PBYTE)MapViewOfFile(hCFGFILEMAP, FILE_MAP_COPY,0 ,0 ,0);


(Сдеся чегото делаем........pbCFGFILE[iiiiii] = "";)


//Чистим за собой
UnmapViewOfFile(pbCFGFILE);
CloseHandle(hCFGFILEMAP);
CloseHandle(hCFGFILE);
22K
13 ноября 2006 года
Hot-Dog
4 / / 12.11.2006
kossak, у меня файл уже создан (file.text), в который мне нужно записать значение интовой переменной m. а то что вы написали, как-то слишком непонятно для меня... :)
294
14 ноября 2006 года
Plisteron
982 / / 29.08.2003
[QUOTE=Hot-Dog]Plisteron,
спасибо! Но почему-то в первом случае записывыется в файл 4198400, независимо от значения данных (в моём случае - это число от нуля до 100);
а во втором ошибка в функции
 
Код:
FileWrite(iFileHandle, Edit1->Text, Edit1->Text.Length());

где указатель на данные, второй параметр, является AnsiString, а не const void, как требует синтаксис функции[/QUOTE]
Я забыл .c_str() добавить.
 
Код:
FileWrite(iFileHandle, Edit1->Text.c_str(), Edit1->Text.Length());


Хотя мне вообще не понятно, зачем используются именно FileOpen/FileWrite/FileClose, когда есть хорошо себя зарекомендовавшие POSIX-совместимые функции fopen/fprintf/fclose.
22K
15 ноября 2006 года
Hot-Dog
4 / / 12.11.2006
Plisteron, спасибо большое! всё работает! :)
20K
15 ноября 2006 года
kossak
20 / / 10.11.2006
Hot-Dog учи мат часть. API функция CreateFile вовсе не обязательно создаёт файл. А то шо я написал спасало меня не один миллион раз.
Спасибо Джеффри Рихтеру. Учи мат часть.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог