2014-12-23 2 views
0

Я создаю приложение для копирования определенных файлов с нашего сервера ubuntu на внешний hdd (отформатированный с помощью ntfs) для резервного копирования, и большинство этих файлов имеют размер более 4 ГБ. Проблема в том, что иногда некоторые файлы отсутствовали (не все файлы и не каждый случай).Отсутствует файл, записанный на внешний диск

Это мой код:

char buf[BUFSIZ]; 
size_t size; 

int source = open(c_fileName, O_RDONLY, 0); 
int dest = open(c_targetFile, O_WRONLY | O_CREAT /*| O_TRUNC/**/, 0644); 

while ((size = read(source, buf, BUFSIZ)) > 0) { 
    write(dest, buf, size); 
    *progress+=size; 
} 

close(source); 
close(dest); 

Я попытался проверить, что файл существует и размер такой же, после того, как приложение дописал, используя этот код:

if (fsource = fopen(c_targetFile, "rb")) { 
    isSourceFileExists=true; 
    // check file size 
    fseek (fsource, 0, SEEK_END); // non-portable 
    size=ftell(fsource); 
    fclose(fsource); 
}else{ 
    isSourceFileExists=false; 
    size=0; 
} 

Но Иногда я не могу найти файл с помощью другого компьютера.

+1

Для производственного кода всегда проверяйте результат всех соответствующих вызовов за ошибку! – alk

+1

Чтобы просто скопировать файлы, я бы пошел на сценарий оболочки. – alk

+1

Особенно, если вы беспокоитесь о поведении программы, вам нужно проверить результаты с помощью 'open()', 'write()' и 'close()' - а также 'read()', которые вы проверяете. –

ответ

0

Вчера, это случилось снова, и я уже проверил, используя ls, и файл есть. Но сегодня, когда я открываю его дома, я понимаю, что отсутствует файл из 24 файлов.

Если файл есть первый и отсутствуют после подключения жесткого диска в в другом месте (или питание вниз и вверх), вы, вероятно, просто не размонтирования диска правильно.

Смежные вопросы