Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
#1

Хитрый fstream - C++

11.03.2010, 11:47. Просмотров 1544. Ответов 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.
Тестовый пример, на котором проявляется ошибка:
0
Вложения
Тип файла: rar Any.rar (3.2 Кб, 10 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 11:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Хитрый fstream (C++):

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

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

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

На Дваче анон поднял хитрый пример на тему ++i, растолкуйте мне, гики, а то я так ничего и не понял - C++
Цитирую...

<fstream> - C++
как читать из файла и записывать переменные написанные через пробел используя ifstream in(&quot;int.txt&quot;); ofstream...

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

2
Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
11.03.2010, 12:08  [ТС] #2
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;
}
то на выходе будет это:
Код
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
Для продолжения нажмите любую клавишу . . .
0
Миниатюры
Хитрый fstream  
Вложения
Тип файла: rar GameScene.rar (113 байт, 8 просмотров)
Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
11.03.2010, 12:26  [ТС] #3
может надо как-то указать, что у меня файл бинарный?

Добавлено через 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);
  //////////////////////////////////
};
Код
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2010, 12:26
Привет! Вот еще темы с ответами:

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

fstream и for - C++
Здрасте. Собственно, не могу понять, по какой причине не работает вот такой вот код, хотя по идее должен работать, или я ошибаюсь? ...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru