Components All New MacOS Windows Linux iOS
Examples Mac & Win Server Client Guides Statistic FMM Blog Deprecated Old

Container.ReadFile

Reads a file with the given path.

Component Version macOS Windows Linux Server iOS SDK
Container 6.4 ✅ Yes ✅ Yes ✅ Yes ✅ Yes ✅ Yes
MBS( "Container.ReadFile"; FilePath { ; mode; filename } )   More

Parameters

Parameter Description Example Flags
FilePath The native file path.
Something like "/Users/cs/desktop/test.txt" on Mac and "C:\Programs\Data\test.txt" on Windows. Files without path end in the root directory on Mac.
"test.txt"
mode If missing or "auto", the plugin will try to detect type by file name extension.
If filter is "container", the result is returned as a container with a FILE stream inside.
The type can be specific here like PDF, JPEG, TIFF, GIF, BMP or PSD to return as image container. Or "compressed" to return a compressed container.
"Auto" Optional
filename If result is container, this defines the file name to use. "test.txt" Optional

Result

Returns container value or error.

Description

Reads a file with the given path.
Reads the data in the file and returns as container.
See also Text.ReadTextFile for reading text files with specific encoding.

For reading simple text files, please use Text.ReadTextFile.
See also Files.ReadFile, Files.ReadJPEG, Files.ReadPDF, Files.ReadPNG, Text.ReadTextFile and RichText.ReadFile.

This function is optimized for FM 14 and newer to stream file content when using auto mode. This allows to import up to 4 GB of data in small chunks.

FileMaker may decide to create a preview when the plugin passes back the data to FileMaker. If FileMaker on macOS creates a preview for a PDF may take some time and leak memory.
This function reads the file data into memory and does not define how FileMaker stores it. This is defined by which field it is later assigned to. And the field options define whether this container value is stored internally or externally.

This function requires a native path. Use Path.FileMakerPathToNativePath to convert a FileMaker path to a native path if required. If you like to have the user choose the path, you can use FileDialog functions.
For Server be aware that server has limited permissions and may not be able to access all files on a computer.

Examples

Read image file:

Set Variable [ $fileContent; Value: MBS( "Container.ReadFile"; "/Users/cs/Pictures/test.jpg"; "auto")]

Read image file with error checking:

# get native path
Set Variable [ $path ; Value: "/Users/cs/Pictures/mond.jpg" ]
#
# read file
Set Variable [ $content ; Value: MBS( "Container.ReadFile"; $path) ]
#
# check for error
If [ MBS("IsError") = 0 ]
    Set Field [ Contacts::Photo Container ; $content ]
Else
    Show Custom Dialog [ "Failed to read file." ; $content ]
End If

Save as PDF and import it to a field:

# go to layout and record before

# build a path for FileMaker
Set Variable [ $name ; Value: "test.pdf" ]
Set Variable [ $path ; Value: Get(DocumentsPath) & $name ]
Set Variable [ $NativePath ; Value: MBS( "Path.FileMakerPathToNativePath"; $path ) ]
#
# Let FileMaker save records
Save Records as PDF [ With dialog: Off ; “$path” ; Records being browsed ; Create folders: Off ]
Set Variable [ $error ; Value: Get(LastError) ]
If [ $error = 0 ]
    # Read result PDF
    Set Variable [ $PDF ; Value: MBS( "Container.ReadFile"; $NativePath) ]
    If [ MBS("ISError") = 0 ]
        # Put in container
        Set Field [ Contacts::PDF File ; $PDF ]
    Else
        Show Custom Dialog [ "Failed to read PDF document" ; $PDF ]
    End If
Else
    Show Custom Dialog [ "Failed to create PDF document" ; Get(LastExternalErrorDetail) ]
End If

Import file on Server on Windows:

MBS( "Container.ReadFile"; "C:\Programs\FileMaker Server\Data\Documents\test.pdf")

Import all files in a folder:

# list files in a folder
Set Variable [ $r ; Value: MBS("Files.List"; $FolderPath) ]

# loop over the files
Set Variable [ $count ; Value: ValueCount ( $r ) ]
Set Variable [ $index ; Value: 0 ]
If [ $count>0 ]
    Loop
        # build path
        Set Variable [$fileName; GetValue ( $r ; $index+1 )]
        Set Variable [$filePath; Value: MBS( "Path.AddPathComponent"; $FolderPath; $fileName )]
            Set Variable [$fileData; Value: MBS("Container.ReadFile"; $filePath)]

        # create record for new file
        New Record/Request
            Set Field [MyData::Container; $fileData ]
        Set Field [MyData::Name; $fileName ]
        Commit Records/Requests [ With dialog: Off ]

        Set Variable [ $index ; Value: $index + 1 ]
        Exit Loop If [ $index = $count ]
    End Loop
End If

See also

Release notes

  • Version 12.0
  • Version 11.3
    • Fixed a memory leak in Container.ReadFile function when used on server and FileMaker creates a PDF preview.

Example Databases

Blog Entries

This function is free to use.

Created 6th September 2016, last changed 23th December 2023


Container.ReadArchive - Container.ReadImage

💬 Ask a question or report a problem