本周文件交换选择

我们最好的用户反馈

避免覆盖文件!

布雷特本周的选择是避免文件覆盖,通过西蒙Musall

内容

一个警世故事

几年前,我做了一件非常愚蠢的事,至今回想起来我都觉得痛苦。从纳米比亚的一次千载难逢的狩猎之旅回来后,我带着一个装满数千张照片的u盘,开始用MATLAB编写的一段代码将这些图像下载到硬盘上。

我把u盘插入一个载体,然后在for循环中,我开始提取图像,把它们写到磁盘上,然后从u盘里删除我去了!令我非常沮丧的是,我很快发现我忽略了更改文件名,而且每个图像都覆盖了前一个图像。分析!

在经历了许多痛苦之后,我最终能够从u盘中恢复大部分图像——但我想那天我老了十岁!想想犯这个可怕的错误是多么容易:

imds = imageDatastore(fullfile(matlabroot,“工具箱”matlab的“imagesci”),...“FileExtensions”, {“.tif”“使用”});numFiles = nummel (imds.Files)创建写目录writeDir1 = fullfile(用户路径,“Test1”);如果~存在(writeDir1“dir”mkdir (writeDir1)结束ii = 1:numFiles img = readimage(imds, ii);imwrite (img fullfile (writeDir1“Oops.png”));结束dir (writeDir1)注意,虽然我打算写两个文件,但实际上我只写了最后一个!(第一张图片被覆盖了!!)
numFiles = 2 ..Oops.png

avoidOverwrite

现在再试试西蒙的avoidOverwrite:创建第二个写目录

writeDir2 = fullfile(用户路径,“Test2”);如果~存在(writeDir2“dir”mkdir (writeDir2)结束ii = 1:numFiles img = readimage(imds, ii);fn = avoidOverwrite(“Oops.png”,写入(img, fullfile(writeDir2, fn))结束dir (writeDir2)
fn = 'Oops.png' fn = 'Oops_01.png' ..Oops.png Oops_01.png

事后来看,avoidOverwrite这样我就不用那么痛苦了!(当然,如果我想到了这种潜在的失败机制,我一开始就会避免它。但那是另一个故事了!)

一如既往,我欢迎你的想法和评论




发布与MATLAB®R2020b

|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。