2011-12-28 2 views
1

У меня есть программа, которая читает набор файлов, закрывает их, а затем пытается их удалить.fstream :: close() не закрывает файл

Иногда (не всегда, но довольно часто) удаление не выполняется с ошибкой «совместного использования».

Использование монитора процессов sysinternals Я видел, что в этих случаях операция закрытия не отражалась на мониторе процесса.

Похоже, что иногда тесный системный вызов пропускается без видимой причины и без каких-либо исключений.

Это происходит на через окно 7 64bit машин с помощью Visual Studio 2010.

код образца;

void readFile(string file) 
{ 
    ifstream stream(file); 
    string line; 
    while(getline(stream, line)) 
    { 
    cout << line << endl: 
    } 
    stream.close(); // this is redundant 
} 

// Вызывающий код:

readFile(file); 
if(remove(file.c_str()) != 0) 
{ 
    cout << "file deletion failed" << endl; 
} 
+3

Минимальную TestCase, который воспроизводит проблемы было бы неплохо. – Xeo

+0

Соответствующий код разворачивается, поэтому копирование всего соответствующего кода проблематично. Кроме того, тот же код работал в других приложениях без каких-либо проблем. –

+1

Если код разбросаны, попробуйте создать минимальный образец кода, который воспроизведет проблему. Скорее всего, проблема покажет вам, когда вы это сделаете. Без кода ответы будут просто спекуляцией и ничего больше. –

ответ