确定文件是否为空并将它们分成不同的文件

时间:2019-05-23 07:12:05

标签: matlab

我的代码的目标是查看某个文件夹并创建一个新的文本文件,其中包含写入该新文件的该文件夹中所有不为空的文件的名称列表,以及将所有空文件(无文本)放入另一个文件夹。我当前的代码只能创建一个新的文本文件,其中包含写入新文件的所有文件的名称列表(无论其内容如何)。我想知道如何设置有关文件(数组)内容的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);

2 个答案:

答案 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.txtnonempty2.txt,还有两个空文件empty1.txtempty2.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中遍历文件要快得多。