/// <exception cref="FailedToCreateUniqueDirectory"></exception> public static AbsoluteDirectoryPath CreateUniqueDirectory( this IFileSystem fileSystem, AbsoluteDirectoryPath path, Func <int, AbsoluteDirectoryPath> createName = null, Func <int, TimeSpan> sleepTime = null, int maxTries = 10) { createName = createName ?? (no => path.Rename(CreateNumberName(path.Name, no))); sleepTime = sleepTime ?? (no => TimeSpan.FromMilliseconds(10)); var exception = Optional.None <Exception>(); for (int i = 0; i < maxTries; i++) { try { var uniquePath = fileSystem.MakeUnique(path, createName); fileSystem.CreateNew(uniquePath); Thread.Sleep(sleepTime(i)); return(uniquePath); } catch (Exception e) { exception = e; } } throw new FailedToCreateUniqueDirectory(path.ContainingDirectory.ToOptional(), exception); }
public static AbsoluteDirectoryPath MakeUnique(this IFileSystem fileSystem, AbsoluteDirectoryPath path) { return(fileSystem.MakeUnique(path, i => path.Rename(CreateNumberName(path.Name, i)))); }