C++ Builer и чтение файла

mae 29.06.2004 - 08:19 | Мне надо прочитать файл полностью (не по строкам) в переменную AnsiString или char*, без разницы. Как это можно сделать?
mae 1 - 29.06.2004 - 08:32 | А также напишите плиз, как удалить файл и проверить его наличие
* 2 - 29.06.2004 - 08:49 | (0) Может считать файл по строкам и строки склеить?
mae 3 - 29.06.2004 - 08:57 | Ну это будет то же самое, что и читать посимвольно в массив char. В файле находится всего несколько символов, например "fz8". И надо это считать в char*. Так вот, я пробовал в начале использовать оператор >>, но выходила ошибка. Поэтому я хочу, чтобы файл просто читался весь и всё. А как по строкам?
mae 4 - 29.06.2004 - 09:03 | А если считать строку (а весь файл - одна строка), то в конце будет перевод строки?
faberge 5 - 29.06.2004 - 09:15 | А почему нельзя использовать <stdio>? Узнай длину файла, выдели буфер и читай сколько хочешь...
archimag 6 - 29.06.2004 - 10:17 | А почему не получилось использовать оператор >>? что за ошибка? Ты память предварительно выделил? а то я других ошибок в данном случае придумать не могу...
dvserg 7 - 29.06.2004 - 11:06 | TStringList *str = new TStringList(); AnsiStrng a; if (FileExists("filename+path")) { str->LoadFromFile("filename+path"); a = str->Text; } delete str;
dvserg 8 - 29.06.2004 - 11:08 | DeleteFile("FileName + path");
mae 9 - 29.06.2004 - 12:08 | 6, вот я сейчас сделал так: --------------- ifstream infile("active.txt"); if(infile) { char* s; infile >> s; infile.close(); } --------- Так можно делать? Здесь я память не выделяю, а всё равно вроде работает, и правильно считывает. В данном случае обязательно память выделять?
archimag 10 - 29.06.2004 - 13:43 | "Вроде" работает? А ты пытался использовать s посел этого кода? Если, проблем не возникает - это везение, тебя должно выкинуть с сообщением о нарушении доступа. Ведь ты считываешь строку неизвестно куда... Лучше напиши так: char s[100]; infile >> s;
Старый Добрый UE 11 - 01.07.2004 - 03:24 | см. _open, _fstat, _read, _close ;)
Посторонним В 12 - 01.07.2004 - 18:47 | ;кусок main.h: FILE *f; //файл char *file_name, //имя файла *search_string; //строка поиска void* buffer; //указатель на буфер unsigned long file_length; //размер файла ;кусок main.cpp: //если не работал с файлом, открываю его и узнаю длину if ((f == NULL) && (file_name != NULL)) { f = fopen(file_name, "rb"); //контрольная проверка if (f == NULL) return; fseek(f, 0, SEEK_END); file_length = ftell(f); fseek(f, 0, SEEK_SET); } //инициализирую буфер if (buffer == NULL) buffer = new char[block_size]; //позиционируюсь на начало и заполняю буфер fseek(f, 0, SEEK_SET); //зануляю буфер memset(buffer, 0, block_size); //если файл меньше, чем буфер, то качаю только часть if (file_length < block_size) fread(buffer, file_length, 1, f); else fread(buffer, block_size, 1, f);
archimag 13 - 01.07.2004 - 20:12 | 12: Забавный код ты написал ... if ((f == NULL) && (file_name != NULL)) - а если и то и другое NULL? Ты последствия представляешь? ... что такое block_size я вообще не понял ... memset(buffer, 0, block_size) - зачем обнулять, ведь ты же туда читать собрался? ... а зачем тебе длина файла? и зачем if (file_length < block_size)? fread больше чем есть не прочитает :-) А если нужно прочитать весь файл, то надо так: buffet = new char[file_length] ... Да и вообще, зачем делать это средствами C, если можно средствами С++?
mae 14 - 02.07.2004 - 11:54 | Да уж, >> и << мне больше нравятся...
Посторонним В 15 - 03.07.2004 - 12:11 | Извиняюсь, это я без переделки куски кода запостил. Я там файл по кускам размером block_size читаю. Просто это из класса, который ищет в файлах _любого_ размера строчку символов. Раз файл может быть гиговый, то и читать желательно по кускам. > а если и то и другое NULL? - ну у меня этот код постоянно вызывается, а fopen надо бы 1 раз вызывать, да и память под буфер надо бы 1 раз выделять. Больше ни от чего я не защищаюсь. > зачем обнулять, ведь ты же туда читать собрался? - потому, что я всю дорогу в один буфер читаю. > fread больше чем есть не прочитает :-) - eof-ошибки я с детства не люблю :-)) и если есть возможность избежать, то я избегаю. > Да и вообще, зачем делать это средствами C, если можно средствами С++? - Это тяжелое наследие курса Паскаля в институте :-))))

>>