Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с чтением 26 и ему подобных символов


Автор: En_t_end 3.9.2005, 11:09
Наблюдается проблема с сабжем. Причем, чтение может проводиться как через std::ifstream::get() так и через fgetc() - итог один. Чтение не производиться и наблюдается ряд побочных эфектов. Для фстримов наблюдается эфект зацикливания в потоке символа стоящего перед нужным мне 26-тым(это такая стрелочка). Для FILE *fopen() - потоков наблюдается завершение с ошибкой.
Вопрос:
Как же мне все таки прочить этот треклятый 26-той символ ?

Автор: asdf 3.9.2005, 11:31
попробуй так
Код

ifstream if1(name);
const int SIZE=0x10000;
char cha[SIZE];
if1.readsome(cha, SIZE);

Автор: chaos 3.9.2005, 11:39
че то я не понял smile
или я чето не допонимяю то ли че, но вот я чиркнул пример и у меня все работает
Код

#include <stdio.h>
#include <fstream>

using namespace std;

int WriteData(const char *lpszFileName)
{
    FILE *f = fopen(lpszFileName, "wb");
    if (f)
    {
        for (int ch = 0; ch < 256; ch++)
            fprintf(f, "%c", ch);
        fclose(f);
        return 1;
    }

    return 0;
}

void ReadData1(const char *lpszFileName)
{
    FILE *f = fopen(lpszFileName, "rb");
    if (f)
    {
        unsigned char ch;
        while (! feof(f))
            ch = fgetc(f);

        fclose(f);
    }
}
void ReadData2(const char *lpszFileName)
{
    fstream f;
    f.open(lpszFileName, ios::binary | ios::in);
    unsigned char ch;
    
    while (! f.eof())
        ch = f.get();
}

int main(int argc, char* argv[])
{
    if (WriteData("c:\\26.txt"))
    {
        ReadData1("c:\\26.txt");
        ReadData2("c:\\26.txt");
    }
    return 0;
}



PS наверное ты его открываешь как текстовый

Автор: Mayk 3.9.2005, 11:40
26 это случайно не признак завершения файла ака EOF?
Открой файл как бинарник. Что-то около ios::binary(ну не люблю я iostream'ы, редко пользуюсь, не помню точно) и "rb"

Автор: En_t_end 28.1.2006, 09:33
Поднимаю вопрос. Опять эти клятые управляющие символы. Вопрос, как игнорить их при чтении допустим ReadFile или аналогами из std ? Нужно полное игнорирование, за EOF я не беспокоюсь - сначала узнаю размер файла, поэтому проблем с выходом за файл нет. Читатать нужно по-символьно.

Автор: Dov 28.1.2006, 12:41
Код

if(iscntrl(ch))   //если управляющий символ

Автор: threef 30.1.2006, 19:57
Тут все тебе намекают, читай их как бинарные.
fopen("myfle", "rb")
еще раз: "rb"
а дальше хоть так :

Код

char get(FILE* f)
{
  char x;
  fread(&x,1,1,f);
  return x;
}

Автор: JackYF 31.1.2006, 03:11
если через iostream 'ы:

Код

iostream f("filename.txt",ios::binary);
char mychar;
f.get(mychar);
if (mychar==26) {/*...*/}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)