Помогите с fopen(), FileOpen()
Добавлено: 20 авг 2007, 10:39
Привет народ!
Помогите кто-нибудь, не могу разобраться с записью и чтением файлов, с помощью WinApi
функций (FileOpen(<2 параметра>) , FileRead(<3 параметра>) и FileWrite(<3 параметра>)). Открываю файл, считываю оттуда символ , дальше хочу изменить его на какой-либо другой при помощи switch() :
---------------------//<Отрывок проги>
void __fastcall TMainForm::GetChar()
{
char buf[1]; // можно заменить на char *buf; - без разницы
int fo,fw;
fo=FileOpen(OpenDialog1->FileName ,OF_READ); // можно во время работы проги выбрать файл
fw=FileOpen(Edit1->Text ,OF_WRITE); // можно во время работы проги выбрать файл
while(true)
{
FileRead(fo, buf ,1);
switch(buf) // тут постоянно ошибка
{
case 'q':buf='й'; break; // тут постоянно ошибка
case 'w':buf='q';break; // тут постоянно ошибка
case 'e':buf='p';break; // тут постоянно ошибка
}
if(feof) break;
FileWrite(fw, buf , 1); // тут постоянно ошибка
}
Close(fo); Close(fw);
}
но т.к. тип второго параметра у FileRead(<3 параметра>) и FileWrite(<3 параметра>) есть <void *Buffer> и < const void *Buffer>, что не является значением <LValue>, поэтому компилятор пишет ошибку : "Switch parameters must be LValue."
Если эти API ф-ии заменить поточными fopen(fo,"r"); fgetc(fo); fwrite(fr); то файлы при этом должны быть строго определены и во время работы проги нельзя самому их выбрать (FILE *fo, *fw - тип <const char>), а от этого она только проигрывает (хотя ошибка с switch() - ами пропадает).
Работаю в C++Builder 6.0.
Операционка MS WinXP.
Подскажите кто-нибудь можно ли как-то разрешить эту проблему, пожалуйста!!!
------------------------
Заранее признателен Владмир.
Помогите кто-нибудь, не могу разобраться с записью и чтением файлов, с помощью WinApi
функций (FileOpen(<2 параметра>) , FileRead(<3 параметра>) и FileWrite(<3 параметра>)). Открываю файл, считываю оттуда символ , дальше хочу изменить его на какой-либо другой при помощи switch() :
---------------------//<Отрывок проги>
void __fastcall TMainForm::GetChar()
{
char buf[1]; // можно заменить на char *buf; - без разницы
int fo,fw;
fo=FileOpen(OpenDialog1->FileName ,OF_READ); // можно во время работы проги выбрать файл
fw=FileOpen(Edit1->Text ,OF_WRITE); // можно во время работы проги выбрать файл
while(true)
{
FileRead(fo, buf ,1);
switch(buf) // тут постоянно ошибка
{
case 'q':buf='й'; break; // тут постоянно ошибка
case 'w':buf='q';break; // тут постоянно ошибка
case 'e':buf='p';break; // тут постоянно ошибка
}
if(feof) break;
FileWrite(fw, buf , 1); // тут постоянно ошибка
}
Close(fo); Close(fw);
}
но т.к. тип второго параметра у FileRead(<3 параметра>) и FileWrite(<3 параметра>) есть <void *Buffer> и < const void *Buffer>, что не является значением <LValue>, поэтому компилятор пишет ошибку : "Switch parameters must be LValue."
Если эти API ф-ии заменить поточными fopen(fo,"r"); fgetc(fo); fwrite(fr); то файлы при этом должны быть строго определены и во время работы проги нельзя самому их выбрать (FILE *fo, *fw - тип <const char>), а от этого она только проигрывает (хотя ошибка с switch() - ами пропадает).
Работаю в C++Builder 6.0.
Операционка MS WinXP.
Подскажите кто-нибудь можно ли как-то разрешить эту проблему, пожалуйста!!!
------------------------
Заранее признателен Владмир.