Конференция "Прочее" » Помогите с функцией чтения файла на С++
 
  • @!!ex © (13.02.09 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 © (13.02.09 23:57) [1]
    хм... в файле 28 строк... при этом лишних символов 27...
    это что перевод строки чтоли влияет????
  • @!!ex © (13.02.09 23:59) [2]
    и как от этого избавится??
  • wicked © (14.02.09 00:18) [3]

    > это что перевод строки чтоли влияет????

    угу

    FILE* File = fopen(FileName.c_str(),"rb");


    > fread(&Code[0],1,Size,File);

    fread(Code,1,Size,File);

    любите ман - источник знаний
  • @!!ex © (14.02.09 09:17) [4]

    > FILE* File = fopen(FileName.c_str(),"rb");

    Спасибо.

    > fread(Code,1,Size,File);

    и чем отличается?
  • benito (14.02.09 09:43) [5]
    @!!ex ©   (13.02.09 23:45)

    Страуструп ругался бы на вас. Страуструп категорически рекомендует использовать для ввода/вывода в С++ потоковые классы (в данном случае ifstream).
    Ну а про приведение разделителей строк (будь то \r\n \n\r или \n, в зависимости от операционной системы) к \n в текстовом режиме вы то уж должны знать?
  • @!!ex © (14.02.09 09:51) [6]
    > [5] benito   (14.02.09 09:43)

    Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами. Поэтому при том что давно пишу на С++, никогда раньше не приходилось использовать FILE.
    Про приведение знал, про то, что r - это оказывается текстовый режим - не знал.
  • @!!ex © (14.02.09 09:53) [7]
    > [5] benito   (14.02.09 09:43)

    Вообще странный подход, создаем инстурмент для работы, а потом категорически не рекомендуем его использовать.
    Логика где?
  • benito (14.02.09 10:07) [8]
    @!!ex ©   (14.02.09 09:53) [7]

    >Логика где?

    FILE - это наследие C. Потоковые классы, в целом, рекомендуется использовать потому, что они обеспечивают типобезопасность, автоматическое освобождение ресурсов при выбросе исключений, возможность читать юникод-строки. То есть, потоковые классы это стиль C++, FILE - это стиль C. Учите матчасть.
  • Lavrentiev (14.02.09 10:19) [9]
    >Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами.

    Не от того ли иной российский код так сильно напоминает индийский?
  • @!!ex © (14.02.09 11:31) [10]
    > [8] benito   (14.02.09 10:07)

    Спасибо за дельный совет. ;)

    > [9] Lavrentiev   (14.02.09 10:19)

    А вы индийский код видели, или просто умную вещь повторяете?
    Что-то мне подсказывает, что не видели.
  • @!!ex © (14.02.09 11:53) [11]
    > [8] benito   (14.02.09 10:07)
    > FILE - это наследие C.

    C++ язык не связанный с С. Зачем это наследие? Лишний костыль.
  • wicked © (14.02.09 22:59) [12]

    > > fread(Code,1,Size,File);
    >
    > и чем отличается?

    меньше букав писать и меньше шанс допустить ошибку


    > C++ язык не связанный с С. Зачем это наследие? Лишний костыль.

    наследие - мегатонны написанного на си кода за 2 десятка лет
    скажи, ты откажешься?
  • Alkid © (15.02.09 11:42) [13]

    > wicked ©   (14.02.09 22:59) [12]
    > наследие - мегатонны написанного на си кода за 2 десятка
    > лет
    > скажи, ты откажешься?

    Ну тут Вы неправы. С++ не является надмножеством С, так что для него свой компилятор, для С++ - свой. На самом деле (так сам Страуструп писал в "Дизайне и эволюции С++") он выбрал С потому что это был популярный язык и его "наследие" в С++ обеспечило то, что С++ не стал мертворожденным проектом, а привлек внимание программистов.
 
Конференция "Прочее" » Помогите с функцией чтения файла на С++
Есть новые Нет новых   [134454   +43][b:0][p:0.001]