我有一個代碼創建一個子文件夾,但首先刪除子文件夾,如果它已經存在。我在Win7 pro機器上使用了MinGW的Octave3.6.4_gcc4.6.2。我注意到,如果子文件夾存在幷包含多個文件,則mkdir會失敗。在執行下一行代碼之前,似乎rmdir尚未在後臺完成。以下是測試代碼的示例。八度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
下面是當一個子文件夾存在並且包含349 KB的總規模3個PNG文件是爲Octave的結果。 mkdir和rmdir的狀態爲1。但是,存在的函數報告該文件夾不存在。我從Windows資源管理器確認子文件夾已被刪除。我的猜測是,當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感謝您的評論。我在Win7 pro上使用了MinGW的Octave3.6.4_gcc4.6.2。我使用了總共大小爲349 KB的3個PNG文件。我已經爲該問題添加了更多信息。 – JackOTrade