Directories in Modelica
Here’s the translation of the Go code to Modelica, formatted in Markdown suitable for Hugo:
Our first example demonstrates how to work with directories in Modelica. Here’s the full source code:
model DirectoryOperations
import Modelica.Utilities.Files;
import Modelica.Utilities.System;
function createEmptyFile
input String fileName;
algorithm
Files.remove(fileName);
Files.createFile(fileName);
end createEmptyFile;
equation
when initial() then
// Create a new sub-directory in the current working directory
Files.createDirectory("subdir");
// Create empty files
createEmptyFile("subdir/file1");
// Create a hierarchy of directories
Files.createDirectory("subdir/parent");
Files.createDirectory("subdir/parent/child");
createEmptyFile("subdir/parent/file2");
createEmptyFile("subdir/parent/file3");
createEmptyFile("subdir/parent/child/file4");
// List directory contents
Modelica.Utilities.Streams.print("Listing subdir/parent");
for fileName in Files.listFiles("subdir/parent") loop
Modelica.Utilities.Streams.print(" " + fileName + " " + String(Files.isDirectory("subdir/parent/" + fileName)));
end for;
// Change current working directory
System.setWorkingDirectory("subdir/parent/child");
Modelica.Utilities.Streams.print("Listing subdir/parent/child");
for fileName in Files.listFiles(".") loop
Modelica.Utilities.Streams.print(" " + fileName + " " + String(Files.isDirectory(fileName)));
end for;
// Change back to the original directory
System.setWorkingDirectory("../../..");
// Recursively visit directory
Modelica.Utilities.Streams.print("Visiting subdir");
visitDirectory("subdir");
// Clean up
Files.removeDirectory("subdir", true);
end when;
function visitDirectory
input String dirPath;
algorithm
for fileName in Files.listFiles(dirPath) loop
Modelica.Utilities.Streams.print(" " + dirPath + "/" + fileName + " " + String(Files.isDirectory(dirPath + "/" + fileName)));
if Files.isDirectory(dirPath + "/" + fileName) then
visitDirectory(dirPath + "/" + fileName);
end if;
end for;
end visitDirectory;
end DirectoryOperations;This Modelica code demonstrates various directory operations:
- Creating directories using
Files.createDirectory. - Creating empty files with a custom function.
- Listing directory contents using
Files.listFiles. - Changing the current working directory with
System.setWorkingDirectory. - Recursively visiting a directory structure with a custom function.
Note that Modelica doesn’t have built-in functions for all the operations we saw in the original example. For instance, there’s no direct equivalent to os.MkdirAll or filepath.WalkDir. We’ve implemented similar functionality using custom functions and recursive calls.
To run this model, you would typically use a Modelica simulation environment. The output would be similar to the following:
Listing subdir/parent
child true
file2 false
file3 false
Listing subdir/parent/child
file4 false
Visiting subdir
subdir/file1 false
subdir/parent true
subdir/parent/child true
subdir/parent/child/file4 false
subdir/parent/file2 false
subdir/parent/file3 falseThis example demonstrates how to perform basic directory operations in Modelica, including creating directories and files, listing contents, and traversing directory structures.