If you are generating a lot of files in Xojo to be downloaded, it makes sense to zip your files, so that the end-user has only to download one file.
You can easily achieve this with MonkeyBread’s MBS Plugin: ArchiveWriterMBS, which you can download here.
The following code is showing how to create 3 text files in memory. These files are then getting compressed in memory and then automatically downloaded. This project is for Xojo Web 2.0 but will work as well for Desktop Apps with a few changes.
// Array to store the created files var files() as WebFile // >> created as properties in the IDE (e.g. file1 as webfile) file1 = new WebFile file2 = new WebFile file3 = new WebFile zippedFile = new Webfile // << created as properties in the IDE (e.g. file1 as webfile) // Populating the webfiles and adding them to an array file1.MimeType = "text/plain" file1.ForceDownload = False file1.Filename = "file1.txt" file1.Data = "Lore Lipsum 1" files.add(file1) file2.MimeType = "text/plain" file2.ForceDownload = False file2.Filename = "file2.txt" file2.Data = "Lore Lipsum 2" files.add(file2) file3.MimeType = "text/plain" file3.ForceDownload = False file3.Filename = "file3.txt" file3.Data = "Lore Lipsum 3" files.add(file3) // Defining the ZIP File zippedFile.MimeType = "application/zip" zippedFile.ForceDownload = true zippedFile.Filename = "myCompressedFiles.zip" // defining the zip file in memory Var myZip as new ArchiveWriterMBS myZip.SetFormatZip myZip.ZipSetCompressionDeflate var check as boolean = myZip.CreateMemoryFile if check then // Looping over all the files in my array of files for each file as webfile in files // creating an entry in the zip file per webfile in the array var e as new ArchiveEntryMBS e.PathName = file.Filename e.Size = lenb( file.Data ) e.Permissions = &o0644 e.FileType = e.kFileTypeRegular myzip.WriteHeader e call myZip.WriteData file.Data myZip.FinishEntry next myZip.Close end if // copy the Zip-File from the memory into the in-memory ZIP-WebFile zippedFile.data = myZip.MemoryData // download the zip File gotoUrl( zippedFile.url )