我的代码的目标是查看某个文件夹并创建一个新的文本文件,其中包含写入该新文件的该文件夹中所有不为空的文件的名称列表,以及将所有空文件(无文本)放入另一个文件夹。我当前的代码只能创建一个新的文本文件,其中包含写入新文件的所有文件的名称列表(无论其内容如何)。我想知道如何设置有关文件(数组)内容的if语句。
function ListFile
dirName = '';
files = dir(fullfile(dirName,'*.txt'));
files = {files.name};
[fid,msg] = fopen(sprintf('output.txt'),'w+t');
assert(fid>=0,msg)
fprintf(fid,'%s\n',files{:});
fclose(fid);
答案 0 :(得分:0)
编辑:Stewie Griffin's comment中的链接解决方案更好。使用这个!
一种简单的方法是迭代所有文件,打开它们,然后检查它们的内容。注意:如果文件很大,此方法可能会占用大量内存。
可能的代码如下所示:
function ListFile
dirName = '';
files = dir(fullfile(dirName, '*.txt'));
files = {files.name};
fidEmpty = fopen(sprintf('output_empty_files.txt'), 'w+t');
fidNonempty = fopen(sprintf('output_nonempty_files.txt'), 'w+t');
for iFile = 1:numel(files)
content = fileread(files{iFile})
if (isempty(content))
fprintf(fidEmpty, '%s\n', files{iFile});
else
fprintf(fidNonempty, '%s\n', files{iFile});
end
end
fclose(fidEmpty);
fclose(fidNonempty);
我有两个非空文件nonempty1.txt
和nonempty2.txt
,还有两个空文件empty1.txt
和empty2.txt
。运行这段代码,我得到以下输出。
调试fileread
的输出:
content =
content =
content = Test
content = Another test
output_empty_files.txt
的内容:
empty1.txt
empty2.txt
output_nonempty_files.txt
的内容:
nonempty1.txt
nonempty2.txt
答案 1 :(得分:0)
Matlab并不是执行此任务的最佳工具(尽管它有能力)。要生成您要查找的文件,命令行工具会更加高效。
例如,使用GNU find可以做到
find . -type f -not -empty -ls > notemptyfiles.txt
find . -type f -empty -ls > emptyfiles.txt
创建所需的文本文件。 Here's a link用于使用Windows命令行执行类似的操作。如果您想使用system command,也可以在Matlab中调用这些函数。这比在Matlab中遍历文件要快得多。