Главная страница
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.008 c
2-1235541964
Кирей
2009-02-25 09:06
2009.04.12
Нумерация ячеек в таблицах Worda


2-1235233665
Denis__
2009-02-21 19:27
2009.04.12
Прозрачность на TImage


15-1234461166
Кое кто
2009-02-12 20:52
2009.04.12
Можно ли восстановить телефон?


2-1234868786
b@v
2009-02-17 14:06
2009.04.12
Вывод изображения


11-1199545801
tim128
2008-01-05 18:10
2009.04.12
Обработка ошибок под WinCE