Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
#1

обрезает файл - C++

05.09.2013, 20:31. Просмотров 298. Ответов 5
Метки нет (Все метки)

файл 103 кб. его расширение ".1603"(фиг знает где я его нашел). после записи он весит всего 8кб
обрабатываю этим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void handler_file(char*path)
{
    char buff[100000];
    FILE* pFile;
    char ch;
    int i=0;
    pFile = fopen(path, "r");
    while((ch=getc(pFile))!=EOF)
    buff[i++]=ch;
    buff[i]=NULL;
    CharToOem(LPCWSTR(buff),buff);
    fclose(pFile); 
    pFile = fopen(path, "w");
    fprintf(pFile,buff);
    fclose(pFile); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 20:31     обрезает файл
Посмотрите здесь:

C++ Записует только одну букву в файл текс в файл
Файл: Записать в файл g целые числа b1..bn по следющим условиям: b[i] = i и b[i] = 2^i +3^(i+1) C++
C++ Дан символьный файл f. Добавить в его конец символы e,n,d (если это необходимо, использовать дополнительный файл g ).
Файл: Считать файл TWO, удвоив все буквы «а». C++
error C4335: Обнаружен файл в формате Mac: преобразуйте исходный файл в формат DOS или UNIX C++
C++ std::string variable.data() обрезает содержимое строки
C++ Файл: Сформировать файл, элементами котого являются числа a1, a1*a2, a1*a2*a3,..., a1*a2*a3*...*an
C++ Записать из файла f четные цифры в файл g, а нечетные в файл h
C++ Переписать все отрицательные числа в файл g, положительные — в файл h
C++ Разбиение метода класса на файл реализации и файл заголовка
функция, которая обрезает пробелы в конце переданной ей строки C++
Потерял cpp файл, а ехе-шник остался. Можно как-то декомпилировать файл обратно? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 20:48     обрезает файл #2
Количество считанного в буфер проверьте. Если считано меньше, чем в файле, то значит в файле, есть -1, которая трактуется, при чтении, как символ конца файла. Значит нужно метод чтения изменить. Файл выложите.
palva
 Аватар для palva
2434 / 1656 / 208
Регистрация: 08.06.2007
Сообщений: 6,566
Записей в блоге: 4
05.09.2013, 21:18     обрезает файл #3
Боюсь, что в данном случае байт 0xFF попадет в переменную ch как -1 и будет далее интерпретирован как EOF. Может быть переменную ch описать иначе?
C++
1
int ch
Добавлено через 11 минут
При чтении файла в текстовом режиме символ 0x1A воспринимается как конец файла. При открытии файла вы не указываете режим. Проверьте, какое умолчание использует ваш компилятор. Надежнее открывать с параметрами "rb" и "wb" соответственно.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 21:34     обрезает файл #4
C++
1
2
3
4
5
6
while(1)
{
     ch = getc(pFile);
     if (feof(pFile)) break;
     buff[i++] = ch;
}
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
05.09.2013, 21:38  [ТС]     обрезает файл #5
Цитата Сообщение от palva Посмотреть сообщение
Боюсь, что в данном случае байт 0xFF попадет в переменную ch как -1 и будет далее интерпретирован как EOF. Может быть переменную ch описать иначе?
C++
1
int ch
Добавлено через 11 минут
При чтении файла в текстовом режиме символ 0x1A воспринимается как конец файла. При открытии файла вы не указываете режим. Проверьте, какое умолчание использует ваш компилятор. Надежнее открывать с параметрами "rb" и "wb" соответственно.
объявил как инт - все заработало! СПСИБО
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 22:07     обрезает файл #6
Только размер буфера увеличьте. Файл размером 110 463 байта, а размер буфера 100 000. Поэтому читается за границу массива (у меня, в студии, исключение выдаёт).
Yandex
Объявления
05.09.2013, 22:07     обрезает файл
Ответ Создать тему
Опции темы

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