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 |
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
- Container.ReadImage
- Container.WriteFile
- Path.AddPathComponent
- Path.FileMakerPathToNativePath
- QLPreviewPanel.SavedFiles
- RichText.ReadFile
- WIA.Image
- WIA.ImageCount
- WIA.ImageDialog
- WinPhotoAcquire.Files
Release notes
- Version 12.0
- Fixed Container.ReadFile to read empty files.
- Version 11.3
- Fixed a memory leak in Container.ReadFile function when used on server and FileMaker creates a PDF preview.
Example Databases
- DynaPDF/Batch Preview
- DynaPDF/PDF Library
- DynaPDF/ZUGFeRD
- iOS/Examples/iOS Photo Picker
- Mac and iOS/Contacts/Contacts
- Mac and iOS/PDFKit/Printing iOS
- Mac only/ImageCapture/ImageCapture Dialogs
- Mac only/ImageCapture/ImageCapture
- SQL in FileMaker/ImageGallery
- Utility functions/Trigger Script on Plugin Error
Blog Entries
- Drag and drop in combination with overlays
- PhotoPicker for iOS with FileMaker iOS SDK
- Container
- Convert Office Files in FileMaker
- Windows Photo Acquire for FileMaker
- Combined Components with MBS FileMaker Plugin
- Save PDF to container in FileMaker
- Read HEIC or HEIF image files in FileMaker
- FileMaker 18 File Script Steps vs. BinaryFile functions
- Comparing Base Elements Plugin to MBS FileMaker Plugin
FileMaker Magazin
This function is free to use.
Created 6th September 2016, last changed 23th December 2023