У меня есть код, который создает подпапку, но сначала удаляет подпапку, если она уже существует. Я использую Octave3.6.4_gcc4.6.2 для MinGW на машине Win7 pro. Я заметил, что mkdir терпит неудачу, если вложенная папка существует и содержит несколько файлов. Кажется, что rmdir не закончил в фоновом режиме до того, как будут выполнены следующие строки кода. Ниже приведен образец тестового кода.octave mkdir не работает после рекурсивного rmdir
parentDir = 'C:\Temp\rmDir';
childDir = fullfile(parentDir, 'output');
if (exist(childDir, 'dir') ~= 0)
[status] = rmdir(childDir, 's');
disp(status);
end;
[status] = mkdir(parentDir, 'output');
disp(status);
disp(exist(childDir, 'dir'));
Ниже приведено значение Октавы, когда подпапка не существует. Это работает так, как ожидалось.
octave:5> testrmdir
1
7
Ниже приводится результат Октавы, когда существует подпапка и пуста. Это работает так, как ожидалось.
octave:6> testrmdir
1
1
7
Ниже приведен результат для октавных, когда вложенная папка существует и содержит 3 PNG файлов с общим размером 349 КБ. Статус равен 1 для mkdir и rmdir. Тем не менее, функция exist сообщает, что папка не существует. Я проверяю из Windows Explorer, что вложенная папка удалена. Я предполагаю, что когда mkdir выполняется, файлы все еще удаляются с помощью предыдущей функции rmdir. Таким образом, mkdir сообщает об успехе, потому что вложенная папка еще не была удалена rmdir. Однако к моменту существования выполнено rmdir завершено, и поэтому вложенная папка больше не существует.
octave:7> testrmdir
1
1
0
Я пробовал различные типы файлов со следующими результатами:
- 2 PNG файлов, 232 KB всего - пройти
- 4 PNG файлов, 465 KB всего - сбой
- 3 PNG файлы , 349 KB всего - сбой
- 3 CSV файлов, 518 KB всего - пройти
- 5 CSV файлов, 777 KB всего - сбой
Поведение такое же, когда я запускаю Octave из командной строки. Я использовал тот же код на MATLAB в прошлом без каких-либо заметных проблем. На данный момент мне пришлось переключиться на Octave для автоматизации тестирования на другой машине.
Имеет ли это смысл? Любые предложения о том, как сделать этот код работать независимо от содержимого или размера подпапки?
Не уверен, что это важно, но в файле ресурсов у меня есть следующая настройка: confirm_recursive_rmdir (false).
Я тестировал это с небольшим количеством файлов на Ubuntu, и проблем не было. Сколько/сколько файлов? И какую версию Octave вы используете на какой платформе? – stephematician
@stephematician спасибо за комментарий. Я использую Octave3.6.4_gcc4.6.2 для MinGW для Win7 pro. Я использовал 3 PNG-файла с общим размером 349 КБ. Я добавил дополнительную информацию к вопросу. – JackOTrade