Example #1
0
        /// <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);
        }
Example #2
0
 public static AbsoluteDirectoryPath MakeUnique(this IFileSystem fileSystem, AbsoluteDirectoryPath path)
 {
     return(fileSystem.MakeUnique(path, i => path.Rename(CreateNumberName(path.Name, i))));
 }