文件操作 #

一、文件读写基础 #

1.1 打开和关闭文件 #

matlab
% 打开文件
fid = fopen('data.txt', 'r');  % 只读
fid = fopen('data.txt', 'w');  % 写入(覆盖)
fid = fopen('data.txt', 'a');  % 追加
fid = fopen('data.txt', 'r+'); % 读写

% 检查是否成功
if fid == -1
    error('无法打开文件');
end

% 关闭文件
fclose(fid);

% 关闭所有文件
fclose('all');

1.2 读取文本文件 #

matlab
% 方法1:fgetl逐行读取
fid = fopen('data.txt', 'r');
while ~feof(fid)
    line = fgetl(fid);
    disp(line);
end
fclose(fid);

% 方法2:fileread读取全部
content = fileread('data.txt');

% 方法3:readlines逐行读取
lines = readlines('data.txt');

1.3 写入文本文件 #

matlab
fid = fopen('output.txt', 'w');
fprintf(fid, 'Hello World\n');
fprintf(fid, '数值: %.2f\n', 3.14159);
fprintf(fid, '数组: %d %d %d\n', 1, 2, 3);
fclose(fid);

1.4 格式化读写 #

matlab
% 写入格式化数据
x = 1:10;
y = sin(x);
fid = fopen('data.txt', 'w');
for i = 1:length(x)
    fprintf(fid, '%d %.6f\n', x(i), y(i));
end
fclose(fid);

% 读取格式化数据
fid = fopen('data.txt', 'r');
data = textscan(fid, '%d %f');
fclose(fid);
x = data{1};
y = data{2};

二、二进制文件 #

2.1 读取二进制 #

matlab
fid = fopen('data.bin', 'rb');

% 读取整数
data = fread(fid, [100, 1], 'int32');

% 读取浮点数
data = fread(fid, [100, 1], 'double');

% 读取到文件末尾
data = fread(fid, inf, 'double');

% 读取指定字节
data = fread(fid, 100, 'uint8=>char');

fclose(fid);

2.2 写入二进制 #

matlab
data = rand(100, 1);

fid = fopen('output.bin', 'wb');
fwrite(fid, data, 'double');
fclose(fid);

2.3 文件定位 #

matlab
fid = fopen('data.bin', 'rb');

% 获取当前位置
pos = ftell(fid);

% 移动到指定位置
fseek(fid, 100, 'bof');  % 从文件开头
fseek(fid, 10, 'cof');   % 从当前位置
fseek(fid, -10, 'eof');  % 从文件末尾

% 重置到开头
frewind(fid);

% 获取文件大小
fseek(fid, 0, 'eof');
file_size = ftell(fid);
frewind(fid);

fclose(fid);

三、目录操作 #

3.1 获取目录内容 #

matlab
% 当前目录
current_dir = pwd;

% 切换目录
cd('new_directory');

% 列出目录内容
files = dir();
files = dir('*.m');        % 只列出.m文件
files = dir('data/');      % 指定目录

% 获取文件信息
for i = 1:length(files)
    if ~files(i).isdir
        fprintf('%s (%d bytes)\n', files(i).name, files(i).bytes);
    end
end

3.2 创建和删除目录 #

matlab
% 创建目录
mkdir('new_folder');
mkdir('parent', 'child');  % 创建嵌套目录

% 检查目录是否存在
if ~exist('new_folder', 'dir')
    mkdir('new_folder');
end

% 删除空目录
rmdir('empty_folder');

% 删除非空目录
rmdir('folder', 's');

3.3 路径操作 #

matlab
% 拼接路径
full_path = fullfile('folder', 'subfolder', 'file.txt');

% 分割路径
[path, name, ext] = fileparts('/path/to/file.txt');
% path = '/path/to'
% name = 'file'
% ext = '.txt'

% 获取文件名
[~, name, ~] = fileparts('/path/to/file.txt');

% 获取扩展名
[~, ~, ext] = fileparts('/path/to/file.txt');

四、文件管理 #

4.1 复制、移动、删除 #

matlab
% 复制文件
copyfile('source.txt', 'destination.txt');
copyfile('source.txt', 'folder/');

% 移动文件
movefile('source.txt', 'destination.txt');
movefile('source.txt', 'folder/');

% 重命名
movefile('old_name.txt', 'new_name.txt');

% 删除文件
delete('file.txt');

% 删除多个文件
delete('*.tmp');

4.2 检查文件 #

matlab
% 检查文件是否存在
if exist('file.txt', 'file')
    disp('文件存在');
end

% 检查目录是否存在
if exist('folder', 'dir')
    disp('目录存在');
end

% 获取文件信息
info = dir('file.txt');
fprintf('大小: %d bytes\n', info.bytes);
fprintf('修改时间: %s\n', datestr(info.datenum));

五、临时文件 #

5.1 临时目录和文件 #

matlab
% 获取临时目录
temp_dir = tempdir;

% 创建临时文件
temp_file = tempname;
fid = fopen([temp_file '.txt'], 'w');
fprintf(fid, '临时数据');
fclose(fid);

% 使用后删除
delete([temp_file '.txt']);

六、实用示例 #

6.1 批量处理文件 #

matlab
function process_all_files(folder, pattern)
% PROCESS_ALL_FILES 批量处理文件
    
    files = dir(fullfile(folder, pattern));
    
    for i = 1:length(files)
        filename = fullfile(folder, files(i).name);
        
        % 读取文件
        data = readmatrix(filename);
        
        % 处理数据
        result = process(data);
        
        % 保存结果
        output_name = strrep(files(i).name, '.', '_result.');
        writematrix(result, fullfile(folder, 'results', output_name));
        
        fprintf('处理完成: %s\n', files(i).name);
    end
end

6.2 日志文件 #

matlab
function log_message(filename, message)
% LOG_MESSAGE 写入日志
    
    fid = fopen(filename, 'a');
    timestamp = datestr(now, 'yyyy-mm-dd HH:MM:SS');
    fprintf(fid, '[%s] %s\n', timestamp, message);
    fclose(fid);
end

% 使用
log_message('app.log', '程序启动');
log_message('app.log', '处理完成');

七、总结 #

本章学习了:

  1. 文件读写:fopen、fclose、fprintf、fscanf
  2. 二进制文件:fread、fwrite、fseek
  3. 目录操作:pwd、cd、dir、mkdir、rmdir
  4. 文件管理:copyfile、movefile、delete
  5. 路径操作:fullfile、fileparts
  6. 临时文件:tempdir、tempname

下一章将学习面向对象编程。

最后更新:2026-03-27