legalizeWindowsFilename function

String legalizeWindowsFilename(
  1. String filename, {
  2. String replacement = '_',
  3. String placeholder = 'untitled',
})

Sanitizes the filename for Windows 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.

Implementation

String legalizeWindowsFilename(String filename, {String replacement = '_', String placeholder = 'untitled'}) {
  var result = filename;

  // Replace control characters
  result = result.replaceAll(controlCharacterRegex, replacement);

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

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

  // Replace reserved file names
  if (isReservedWindowsFilename(result)) {
    for (var reserved in reservedWindowsFilenames) {
      if (result.toLowerCase().startsWith(reserved)) {
        result = replacement + result.substring(reserved.length);
        break;
      }
    }
  }

  // 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;
}