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

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

Восстановить пароль Регистрация
 
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
05.09.2013, 20:31     обрезает файл #1
файл 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++ Дан файл. Записать в другой файл строки, которые являются палиндромами.
C++ Дан символьный файл f. Записать в файл g элементы файла f в обратном порядке
C++ Скопировать текстовый файл в новый файл, заменив в каждой строке слова «ok» на «*»
C++ std::string variable.data() обрезает содержимое строки
Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 20:48     обрезает файл #2
Количество считанного в буфер проверьте. Если считано меньше, чем в файле, то значит в файле, есть -1, которая трактуется, при чтении, как символ конца файла. Значит нужно метод чтения изменить. Файл выложите.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
05.09.2013, 21:18     обрезает файл #3
Боюсь, что в данном случае байт 0xFF попадет в переменную ch как -1 и будет далее интерпретирован как EOF. Может быть переменную ch описать иначе?
C++
1
int ch
Добавлено через 11 минут
При чтении файла в текстовом режиме символ 0x1A воспринимается как конец файла. При открытии файла вы не указываете режим. Проверьте, какое умолчание использует ваш компилятор. Надежнее открывать с параметрами "rb" и "wb" соответственно.
alsav22
5282 / 4801 / 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 22:07     обрезает файл #6
Только размер буфера увеличьте. Файл размером 110 463 байта, а размер буфера 100 000. Поэтому читается за границу массива (у меня, в студии, исключение выдаёт).
Yandex
Объявления
05.09.2013, 22:07     обрезает файл
Ответ Создать тему
Опции темы

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