Форум: "Прочее";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизПомогите с функцией чтения файла на С++ Найти похожие ветки
← →
@!!ex © (2009-02-13 23:45) [0]Мозг уже взрывается.
FILE* File = fopen(FileName.c_str(),"r");
fseek(File,0,SEEK_END);
int Size = ftell(File);
fseek(File,0,SEEK_SET);
char* Code = new char[Size+1];
fread(&Code[0],1,Size,File);
Code[Size] = "\0";
fclose(File);
В итоге Code содержит около 20 символов H(в дебаге все заполняется H, чтобы неверные данные были сразу видны).
Size имеет верное значение, совпадает с показаниями проводника и Notepad++.
Откуда берутся два десятка лишних символов???
← →
@!!ex © (2009-02-13 23:57) [1]хм... в файле 28 строк... при этом лишних символов 27...
это что перевод строки чтоли влияет????
← →
@!!ex © (2009-02-13 23:59) [2]и как от этого избавится??
← →
wicked © (2009-02-14 00:18) [3]
> это что перевод строки чтоли влияет????
угу
FILE* File = fopen(FileName.c_str(),"rb");
> fread(&Code[0],1,Size,File);
fread(Code,1,Size,File);
любите ман - источник знаний
← →
@!!ex © (2009-02-14 09:17) [4]
> FILE* File = fopen(FileName.c_str(),"rb");
Спасибо.
> fread(Code,1,Size,File);
и чем отличается?
← →
benito (2009-02-14 09:43) [5]@!!ex © (13.02.09 23:45)
Страуструп ругался бы на вас. Страуструп категорически рекомендует использовать для ввода/вывода в С++ потоковые классы (в данном случае ifstream).
Ну а про приведение разделителей строк (будь то \r\n \n\r или \n, в зависимости от операционной системы) к \n в текстовом режиме вы то уж должны знать?
← →
@!!ex © (2009-02-14 09:51) [6]> [5] benito (14.02.09 09:43)
Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами. Поэтому при том что давно пишу на С++, никогда раньше не приходилось использовать FILE.
Про приведение знал, про то, что r - это оказывается текстовый режим - не знал.
← →
@!!ex © (2009-02-14 09:53) [7]> [5] benito (14.02.09 09:43)
Вообще странный подход, создаем инстурмент для работы, а потом категорически не рекомендуем его использовать.
Логика где?
← →
benito (2009-02-14 10:07) [8]@!!ex © (14.02.09 09:53) [7]
>Логика где?
FILE - это наследие C. Потоковые классы, в целом, рекомендуется использовать потому, что они обеспечивают типобезопасность, автоматическое освобождение ресурсов при выбросе исключений, возможность читать юникод-строки. То есть, потоковые классы это стиль C++, FILE - это стиль C. Учите матчасть.
← →
Lavrentiev (2009-02-14 10:19) [9]>Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами.
Не от того ли иной российский код так сильно напоминает индийский?
← →
@!!ex © (2009-02-14 11:31) [10]> [8] benito (14.02.09 10:07)
Спасибо за дельный совет. ;)
> [9] Lavrentiev (14.02.09 10:19)
А вы индийский код видели, или просто умную вещь повторяете?
Что-то мне подсказывает, что не видели.
← →
@!!ex © (2009-02-14 11:53) [11]> [8] benito (14.02.09 10:07)
> FILE - это наследие C.
C++ язык не связанный с С. Зачем это наследие? Лишний костыль.
← →
wicked © (2009-02-14 22:59) [12]
> > fread(Code,1,Size,File);
>
> и чем отличается?
меньше букав писать и меньше шанс допустить ошибку
> C++ язык не связанный с С. Зачем это наследие? Лишний костыль.
наследие - мегатонны написанного на си кода за 2 десятка лет
скажи, ты откажешься?
← →
Alkid © (2009-02-15 11:42) [13]
> wicked © (14.02.09 22:59) [12]
> наследие - мегатонны написанного на си кода за 2 десятка
> лет
> скажи, ты откажешься?
Ну тут Вы неправы. С++ не является надмножеством С, так что для него свой компилятор, для С++ - свой. На самом деле (так сам Страуструп писал в "Дизайне и эволюции С++") он выбрал С потому что это был популярный язык и его "наследие" в С++ обеспечило то, что С++ не стал мертворожденным проектом, а привлек внимание программистов.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c