C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Чтение/запись файла, запись содержимое файла в переменную
Chillout
Отправлено: 12.12.2006, 17:37


Ученик-кочегар

Группа: Участник
Сообщений: 12



Здравствуйте! У меня возникла проблема: нужно данные из временного файла (.tmp) занести в переменную. С помощью какой функции можно это сделать? И еще вопросик, какое ограничение по длине у AnsiString?
Заранее спасибо!
Konstantine
Отправлено: 12.12.2006, 18:00


Мастер участка

Группа: Модератор
Сообщений: 545



если файл бинарный — юзай FileOpen / FileRead / FileClose
если текстовый — то можно через TStringList
Chillout
Отправлено: 12.12.2006, 18:41


Ученик-кочегар

Группа: Участник
Сообщений: 12



Файл бинарный. А есть ли примерчики с этими функциями?...
Romikgy
Отправлено: 12.12.2006, 19:45


Дежурный стрелочник

Группа: Участник
Сообщений: 72



QUOTE

какое ограничение по длине у AnsiString?

имхо 4 гигабайта
QUOTE

нужно данные из временного файла (.tmp) занести в переменную.

QUOTE

Файл бинарный.

какая переменая?(тип какой)
Chillout
Отправлено: 12.12.2006, 20:59


Ученик-кочегар

Группа: Участник
Сообщений: 12



Думаю записывать в AnsiString.... Или не стоит...

Так есть у кого-нибудь примерчик на ReadFile? А то в нете чето ничего дельного нет...
Romikgy
Отправлено: 12.12.2006, 23:42


Дежурный стрелочник

Группа: Участник
Сообщений: 72



для двоичных файлов не стоит!

Отредактировано Romikgy — 12.12.2006, 22:43
Chillout
Отправлено: 13.12.2006, 13:40


Ученик-кочегар

Группа: Участник
Сообщений: 12



Ок, а куда стоит?..
Grigoriy
Отправлено: 13.12.2006, 13:47


Мастер участка

Группа: Участник
Сообщений: 381



Для чего вам необходим двоичный файл ?
Chillout
Отправлено: 13.12.2006, 15:58


Ученик-кочегар

Группа: Участник
Сообщений: 12



Ситуация такая: моя прога разбирает почтовое сообщение на части. Вложения записываются во временные файлы (как я понимаю двоичные). Так вот, данные из этих временных файлов нужно записать в ячейку БД Access...
Konstantine
Отправлено: 13.12.2006, 17:18


Мастер участка

Группа: Модератор
Сообщений: 545



а зачем тогда вообще временные файлы???
пусть разбирает и тут же и записует в Б.Д. через поток...

Привет использования функций (из стандартного хелпа)
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)

{
 int iFileHandle;
 int iFileLength;
 int iBytesRead;
 char *pszBuffer;
 if (OpenDialog1->Execute())
 {
   try
   {
     iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);
     iFileLength = FileSeek(iFileHandle,0,2);
     FileSeek(iFileHandle,0,0);
     pszBuffer = newchar[iFileLength+1];
     iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
     FileClose(iFileHandle);

     for (int i=0;i<iBytesRead;i++)
     {
       StringGrid1->RowCount += 1;
       StringGrid1->Cells[1][i+1] = pszBuffer[i];
       StringGrid1->Cells[2][i+1] = IntToStr((int)pszBuffer[i]);
     }
     delete [] pszBuffer;
   }
   catch(...)
   {
     Application->MessageBox("Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK);
   }
 }
}
Chillout
Отправлено: 13.12.2006, 19:19


Ученик-кочегар

Группа: Участник
Сообщений: 12



Я разбираю сообщения стандатными компонентами (IdMessage), а компонент записывает найденные вложения во временные файлы. Ну а применять дополнительные вариации неохота... Вот я и хочу считывать данные сразу из этих временных файлов.
AVC
Отправлено: 14.12.2006, 09:07


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

Вложения записываются во временные файлы (как я понимаю двоичные). Так вот, данные из этих временных файлов нужно записать в ячейку БД Access.
...
Вот я и хочу считывать данные сразу из этих временных файлов.


CODE

->Edit();
TADOBlobStream
TBlobField->LoadFromFile(...);
->Post();


Конкретно для Access'a не пробовал, но не вижу причин почему бы не получилось.
Chillout
Отправлено: 18.12.2006, 10:26


Ученик-кочегар

Группа: Участник
Сообщений: 12



Через TADOBlobStream че то не пошло... Решил сделать через функции CreateFile и ReadFile. Все бы хорошо, только вместо нормальных символов записаваются их десятичные коды! Кто-нибудь знает как получить нормальные символы?

Вернуться в Вопросы программирования в C++Builder