Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2008, 22:08   #1
Wolf-alone
 
Регистрация: 16.09.2008
Сообщений: 8
Вопрос Чтение файлов с диска

Доброго времени суток всем читающим сие. Возникла следующая проблема. Необходимо скопировать с диска файл, при копировании которого возможно будут возникать ошибки. Например: "Пропал компьютер из сети", либо просто "поцарапанный компакт диск". При это желательно копировать файл по 1 байту, что бы знать, на каком байте возникла ошибка. И если байт не читается - попробовать его пропустить и читать следующий. Пробовал все это сделать через getc(); и обрабатывать EOF в качестве ошибки. Размер файла заранее известен. Получилось следующее: при возникновении ошибки при чтении очередного байта - программ просто выходит из цикла чтения и стоит, ничего не делая...
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

(с) Евгений Вольф
Wolf-alone вне форума Ответить с цитированием
Старый 17.09.2008, 10:05   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Можно читать файлы побайтно функцией fread, а затем, в случае, если еще не достигнут конец файла - ловить экспешн, с помощью ferror, вот пример из MSDN, с моими коментариями:
Код:
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int  count, total = 0;
   char buffer[100];
   FILE *stream;

   fopen_s( &stream, "crt_feof.txt", "r" ); //для открытия испозуется "безопасная" версия fopen - fopen_s
   if( stream == NULL )
      exit( 1 );

   // Читаем файл по циклу, пока не дойдем до его конца :
   while( !feof( stream ) )
   {
      // Пытаемся прочесть 100 байт:
      count = fread( buffer, sizeof( char ), 100, stream );
      if( ferror( stream ) )      { //ловим ошибку
         perror( "Read error" ); //выдаем печальное сообщение
         break;  //прерываем цикл чтения
      }

      // сколько байт считали
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   fclose( stream );
}

Последний раз редактировалось oleg kutkov; 17.09.2008 в 10:08.
oleg kutkov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нет диска в устройстве }{@TT@BЬ)Ч Операционные системы общие вопросы 7 20.01.2009 20:18
Скан диска ZYRGiX Win Api 7 30.12.2007 14:05
очистка диска от ненужных файлов }{@TT@BЬ)Ч Софт 4 30.11.2007 05:25
Чтение MP3 файлов из папки PAVEL315 Общие вопросы Delphi 1 03.03.2007 13:33