public void TestSanitizedFilenameUniqueness() { CreateTestDirectory(); string[] similarFilenames = { "foobar.txt", "barfoo.txt", "foo_bar.txt", "foo/bar.txt", "foo\\bar.txt", "フーバー.txt", "バーフー.txt", "フー_バー.txt", "フー/バー.txt", "フー\\バー.txt", }; Dictionary <string, string> mapFromSanitizedToOriginal = new Dictionary <string, string>(); foreach (string filename in similarFilenames) { string sanitizedFilename = FileUtils.SanitizeFilenameAndPreserveUniqueness(filename); // Test the sanitization. try { File.WriteAllText(Path.Combine(sm_TestDirectory, sanitizedFilename), "test"); } catch (System.Exception e) { Assert.Fail("\"{0}\" > \"{1}\" not sanitized, {2}.", filename, sanitizedFilename, e.Message); } // Test uniqueness. Debug.LogFormat("{0} maps to {1}", filename, sanitizedFilename); if (mapFromSanitizedToOriginal.ContainsKey(sanitizedFilename)) { Assert.Fail("\"{0}\" and \"{1}\" both sanitize to \"{2}\".", filename, mapFromSanitizedToOriginal[sanitizedFilename], sanitizedFilename); } else { mapFromSanitizedToOriginal.Add(sanitizedFilename, filename); } } DeleteTestDirectory(); }
/// Like the other CreateLocal but passes the name through a sanitizer. /// Use this if you don't control where "name" comes from. public static ExportFileReference CreateSafeLocal(string originalLocation, string unsafeName) { return(CreateLocal(originalLocation, FileUtils.SanitizeFilenameAndPreserveUniqueness(unsafeName))); }