递归rmdir后octave mkdir失败

时间:2016-11-13 06:21:05

标签: octave mkdir rmdir

我有一个代码可以创建一个子文件夹但是如果它已经存在则首先删除子文件夹。我在Win7 pro机器上使用Octave3.6.4_gcc4.6.2 for MinGW。我注意到如果子文件夹存在并且包含多个文件,则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个总长度为349 KB的PNG文件时的八度结果。 mkdir和rmdir的状态均为1。但是,exists函数报告该文件夹不存在。我从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)。

1 个答案:

答案 0 :(得分:1)

我将if语句更改为while循环,这解决了问题(即我所做的只是替换"如果"使用"而#34;)。然后我在while循环中添加了一个计数器,并在第一次迭代时看到rmdir成功。因此,我无法解释为什么代码不能与if语句一起使用。请参阅下面的新计数器扩展代码。但就像我说的那样,如果我只是替换"如果"在原始代码中使用"而"。

parentDir = 'C:\Temp\rmDir';
childDir = fullfile(parentDir, 'output');
count = 0;
while (exist(childDir, 'dir') ~= 0)
%if (exist(childDir, 'dir') ~= 0)
    count++
    [status] = rmdir(childDir, 's');
    disp(status);
    disp(count);
end;
[status] = mkdir(parentDir, 'output');
disp(status);
disp(exist(childDir, 'dir'));