Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.12;
Скачать: CL | DM;

Вниз

Помогите с функцией чтения файла на С++   Найти похожие ветки 

 
@!!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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
13-1123688943
DiamondShark
2005-08-10 19:49
2009.04.12
Unmanaged interop


2-1235327758
mm_ash
2009-02-22 21:35
2009.04.12
Dataset Buffers


4-1208164694
(Монстр)
2008-04-14 13:18
2009.04.12
Модем, и его статус/состояние...


2-1235468723
Korbit
2009-02-24 12:45
2009.04.12
Получить данные S.M.A.R.T от HDD


6-1202034089
sAshA20
2008-02-03 13:21
2009.04.12
Фильтрация пакетов