legalizePosixFilename function

String legalizePosixFilename(
  1. String filename, {
  2. String replacement = '_',
  3. String placeholder = 'untitled',
  4. bool shouldReplaceControlCharacters = true,
})

Sanitizes the filename for Posix systems.

replacement is used to replace illegal characters. If the filename is empty after sanitization, it will be replaced with placeholder. It is recommended to not use an empty replacement and an empty placeholder as it may result in an empty filename. shouldReplaceControlCharacters determines whether control characters should be replaced. Default is true.

Implementation

String legalizePosixFilename(String filename,
    {String replacement = '_', String placeholder = 'untitled', bool shouldReplaceControlCharacters = true}) {
  var result = filename;

  // Replace null characters
  result = result.replaceAll(String.fromCharCode(0), replacement);

  // Replace control characters
  if (shouldReplaceControlCharacters) {
    result = result.replaceAll(controlCharacterRegex, replacement);
  }

  // Replace illegal characters
  result = result.replaceAll(illegalPosixCharactersRegex, replacement);

  // If the filename is empty, replace it with a placeholder
  if (result.isEmpty || isRelativePath(result)) {
    result = placeholder;
  }

  // Check length
  if (result.length > 255) {
    result = result.substring(0, 255);
  }

  return result;
}