Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336

Хитрый fstream

11.03.2010, 11:47. Показов 1988. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

Вот есть код, казалось бы без ошибок...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <windows.h>
#include <fstream>
#include <vector>
#include <string>
#include <stdio.h>
 
using namespace std;
string mem;
int pos;
 
int FileLength(iostream &f)
{
  f.seekg(0,ios::end);
  int L=f.tellg();
  f.seekg(0,ios::beg);
  return L;
};
 
void LoadFile(string FN)
{
  fstream f;
  f.open(FN.c_str(),ios_base::in);
  if(!f)return;
  int L=FileLength(f); mem.resize(L);
  f.read(&mem[0],L);
  f.close(); pos=0;
};
 
int main(int argc, char* argv[])
{
  LoadFile("GameScene.qap");
  for(int i=3800;i<3900;i++)
    printf("[%i] = '%X'\n",i,(unsigned char)mem[i]);
  system("pause");
  return 0;
}
гарантировано, что размер входного файла больше 5кб.

Вот интересно, почему этот код не читает некоторые файлы... точнее читает, но не до конца? У меня такое предчувствие, что ему не безразлично что у них внутри...
ps: WinXP, MSVC++ 2005.
Тестовый пример, на котором проявляется ошибка:
Вложения
Тип файла: rar Any.rar (3.2 Кб, 11 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2010, 11:47
Ответы с готовыми решениями:

Хитрый комментарий
Когдато давно в этом разделе я выложил задачу, которая с виду была элементарна, но содержала интересный хак, из-за которого она работала...

Хитрый обход дерева в глубину
По условию необходимо обойти дерево так чтобы найти путь max длины не имеющий кратных вершин, приэтом советуют пользоваться алгоритмом с...

Самый хитрый код (Несерьезная тема)
Вот, собственно нашел в интернете код #include &lt;cstdio&gt; double m= {7709179928849219.0, 771}; int main() { ...

2
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
11.03.2010, 12:08  [ТС]
Cделал файл покороче.
немного поправил код:
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char* argv[])
{
  LoadFile("GameScene.qap");
  for(int i=0;i<mem.size();i++)
  {
    if(i%8==0)printf("\n"); printf("%.2X ",(unsigned char)mem[i]); 
  };
  printf("\n");
  system("pause");
  return 0;
}
то на выходе будет это:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
42 65 67 69 6E 20 68 65
72 65 00 4B 00 00 00 00
00 00 00 01 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
Для продолжения нажмите любую клавишу . . .
Миниатюры
Хитрый fstream  
Вложения
Тип файла: rar GameScene.rar (113 байт, 9 просмотров)
0
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
11.03.2010, 12:26  [ТС]
может надо как-то указать, что у меня файл бинарный?

Добавлено через 10 минут
а вот-так всё верно читает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void LoadFile(string FN)
{
  fstream f;
  f.open(FN.c_str(),ios_base::in);
  if(!f)return;
  int L=FileLength(f); mem.resize(L); 
  f.close(); pos=0;
  //////////////////////////////////
  FILE *file;
  file = fopen(FN.c_str(),"rb"); 
  fgets(&mem[0],L,file);
  fclose(file);
  //f.readsome(&mem[0],L);
  //////////////////////////////////
};
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
42 65 67 69 6E 20 68 65
72 65 00 4B 00 00 00 00
00 00 00 01 00 00 00 1A
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 00
Для продолжения нажмите любую клавишу . . .
Добавлено через 4 минуты
нашёл...
[ссылка удалена]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <fstream>
#include <iomanip>
 
int main ( int argc, char **argv ) {
 
    if ( 2 != argc ) {
        std::cout << "Usage : " << argv[0] << std::endl;
        return 1;
    }
 
    std::ifstream in ( argv[1], std::ios_base::in, std::ios_base::binary );
    if ( !in.is_open() ) {
        std::cout << "Failed to open : " << argv[1] << std::endl;
        return 2;
    }
 
    int i = 0;
    while ( in.good() ) {
        char data = 0;
 
        std::fstream::pos_type previous_pos = in.tellg();
        in.read ( & data, sizeof ( char ) );
        std::fstream::pos_type current_pos = in.tellg();
 
        std::cout 
            << "#" << i++ << " ... 0x" << std::hex << std::setw ( 2 ) << std::setfill('0') << static_cast <int> ( data )
            << " ... good ? " << std::boolalpha << in.good() << " ... " << std::dec << previous_pos << "/" << current_pos << std::endl;
    }
 
    in.close();
    return 0;
}
как раз то что надо .

Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2010, 12:26
Помогаю со студенческими работами здесь

fstream с++
Помогите пожалуйста... Как при считывании из файла считать переменные если они в файле находяться на разных строчках например надо...

fstream
Всем доброго дня! Как с помощью библиотеки fstream вывести содержимое файла на экран??

Fstream
multiple definition of `ZapisInputFile'| Определив ofstream в header файле получаю ошибку, а закомментировав эту строку успешно...

fstream
помогите, пожалуйста, чет я совсем запуталась((( /*Дан текстовый фал, содержащий целые числа, разделенные пробелами. Определить...

fstream
Дан текстовый файл. Осуществить посимвольную чередующуюся печать файла в прямом и обратном направлении в новый файл. Например, если в файле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru