Main Content

使用 MDF 附件文件

此示例说明如何将附件文件添加到 MDF 文件中,如何从 MDF 文件中删除附件文件,以及如何将嵌入在 MDF 文件中的附件文件保存到磁盘。此示例 VehicleData.mf4 中使用的 MDF 文件当前有一个名为 ReadMe.txt 的嵌入附件。

4.0 版或更高版本的 MDF 文件可以有多个附件。可以将附件实际嵌入到 MDF 文件中,也可以通过文件路径和名称从外部引用。区别在于嵌入附件会增大 MDF 文件的大小,而外部附件不会。此示例使用 .txt 文件进行演示,但您也可以将其他类型的文件附加到 MDF 文件。

检查与附件相关的文件元数据

要检查与附件相关的文件元数据,请使用指定的 MDF 文件名调用 mdfInfo,并查询返回的对象的 Attachment 属性。MDF 文件当前有一个名为 ReadMe.txt 的嵌入附件。

info = mdfInfo("VehicleData.mf4");
info.Attachment
ans=1×7 table
        Name        Comment      Type          MIMEType         Size    EmbeddedSize               MD5CheckSum            
    ____________    _______    ________    _________________    ____    ____________    __________________________________

    "ReadMe.txt"      ""       Embedded    "application/txt"     7           7          "9166BA27E54335BA1043A5FF023E8F4E"

向 MDF 文件添加嵌入附件

在当前工作目录中创建一个名为 HelloWorld.txt 的文本文件。

fileID = fopen("HelloWorld.txt", "w");
fprintf(fileID, "Hello, World!\n");
fclose(fileID);

使用 type 函数查看该文件的内容。

type("HelloWorld.txt")
Hello, World!

您将 HelloWorld.txt 作为附件添加到 MDF 文件 VehicleData.mf4,这需要 MDF 文件的修改权限。首先,检查您是否拥有 MDF 文件的写入访问权限。如果没有,请使 MDF 文件可写。

[~, values] = fileattrib("VehicleData.mf4");
if ~values.UserWrite
    fileattrib("VehicleData.mf4", "+w")
end

使用函数 mdfAddAttachment,将可选参量 Embedded 设置为 true。此选项确定是否将附件实际嵌入到 MDF 文件中。默认值为 false

mdfAddAttachment("VehicleData.mf4", "HelloWorld.txt", Embedded=true)

要验证嵌入的附件是否已成功添加,请检查与附件相关的文件元数据。请注意,对于第二个附件,Size 等于 EmbeddedSize,因为它是嵌入的附件。

info = mdfInfo("VehicleData.mf4");
info.Attachment
ans=2×7 table
          Name          Comment      Type          MIMEType         Size    EmbeddedSize               MD5CheckSum            
    ________________    _______    ________    _________________    ____    ____________    __________________________________

    "ReadMe.txt"          ""       Embedded    "application/txt"      7           7         "9166BA27E54335BA1043A5FF023E8F4E"
    "HelloWorld.txt"      ""       Embedded    "application/txt"     14          14         "BEA8252FF4E80F41719EA13CDF007273"

向 MDF 文件添加外部附件

创建一个名为 myFolder 的子目录,并在此子目录中创建一个名为 HelloWorld10.txt 的文本文件。

mkdir myFolder
fileID = fopen(fullfile("myFolder", "HelloWorld10.txt"), "w");
for ii = 1:10
    fprintf(fileID, "Hello, World! %d\n", ii);
end
fclose(fileID);

使用 type 函数查看该文件的内容。

type(fullfile("myFolder", "HelloWorld10.txt"))
Hello, World! 1
Hello, World! 2
Hello, World! 3
Hello, World! 4
Hello, World! 5
Hello, World! 6
Hello, World! 7
Hello, World! 8
Hello, World! 9
Hello, World! 10

使用函数 mdfAddAttachment.txt 文件的相对路径将 HelloWorld10.txt 作为附件添加到 MDF 文件 VehicleData.mf4 中。未指定可选参量 Embedded,这会将 .txt 文件作为外部链接的附件进行添加。指定可选参量 Comment 以添加有关附加文件的信息。

mdfAddAttachment("VehicleData.mf4", fullfile("myFolder", "HelloWorld10.txt"), Comment="Repeat hello world for 10 times")

要验证外部附件是否已成功添加,请检查与附件相关的文件元数据。请注意,对于第三个附件,Size 不为零,但 EmbeddedSize 为零,因为它是外部附件。

info = mdfInfo("VehicleData.mf4");
info.Attachment
ans=3×7 table
               Name                             Comment                   Type          MIMEType         Size    EmbeddedSize               MD5CheckSum            
    ___________________________    _________________________________    ________    _________________    ____    ____________    __________________________________

    "ReadMe.txt"                   ""                                   Embedded    "application/txt"      7           7         "9166BA27E54335BA1043A5FF023E8F4E"
    "HelloWorld.txt"               ""                                   Embedded    "application/txt"     14          14         "BEA8252FF4E80F41719EA13CDF007273"
    "myFolder/HelloWorld10.txt"    "Repeat hello world for 10 times"    External    "application/txt"    161           0         "99B4FDE65B883C034D1997A6DFD27700"

从 MDF 文件中删除附件

使用 mdfRemoveAttachment 函数删除刚刚添加的名为 HelloWorld.txt 的嵌入附件。

mdfRemoveAttachment("VehicleData.mf4", "HelloWorld.txt")

要验证嵌入的附件是否已成功删除,请检查与附件相关的文件元数据。

info = mdfInfo("VehicleData.mf4");
info.Attachment
ans=2×7 table
               Name                             Comment                   Type          MIMEType         Size    EmbeddedSize               MD5CheckSum            
    ___________________________    _________________________________    ________    _________________    ____    ____________    __________________________________

    "ReadMe.txt"                   ""                                   Embedded    "application/txt"      7          7          "9166BA27E54335BA1043A5FF023E8F4E"
    "myFolder/HelloWorld10.txt"    "Repeat hello world for 10 times"    External    "application/txt"    161          0          "99B4FDE65B883C034D1997A6DFD27700"

同样,删除刚刚添加的名为 HelloWorld10.txt 的外部附件。为了准确识别要删除的附件,指定的附件文件名必须与附件名称完全匹配,如 info.Attachment 中所示。

attachmentName = info.Attachment.Name(2)
attachmentName = 
"myFolder/HelloWorld10.txt"
mdfRemoveAttachment("VehicleData.mf4", attachmentName)

要验证嵌入的附件是否已成功删除,请检查与附件相关的文件元数据。

info = mdfInfo("VehicleData.mf4");
info.Attachment
ans=1×7 table
        Name        Comment      Type          MIMEType         Size    EmbeddedSize               MD5CheckSum            
    ____________    _______    ________    _________________    ____    ____________    __________________________________

    "ReadMe.txt"      ""       Embedded    "application/txt"     7           7          "9166BA27E54335BA1043A5FF023E8F4E"

保存 MDF 文件中嵌入的附件

使用函数 mdfSaveAttachment,将剩余的名为 ReadMe.txt 的嵌入附件保存到当前 MATLAB® 工作文件夹中。

mdfSaveAttachment("VehicleData.mf4", Attachment="ReadMe.txt")