summaryrefslogtreecommitdiff
path: root/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Toolkit/Utilities/PathUtilities.cs')
-rw-r--r--src/SMAPI.Toolkit/Utilities/PathUtilities.cs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/SMAPI.Toolkit/Utilities/PathUtilities.cs b/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
index c9fb6213..a394edba 100644
--- a/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
+++ b/src/SMAPI.Toolkit/Utilities/PathUtilities.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.IO;
using System.Linq;
@@ -133,5 +134,29 @@ namespace StardewModdingAPI.Toolkit.Utilities
{
return !Regex.IsMatch(str, "[^a-z0-9_.-]", RegexOptions.IgnoreCase);
}
+
+ /// <summary>Get the paths which exceed the OS length limit.</summary>
+ /// <param name="rootPath">The root path to search.</param>
+ internal static IEnumerable<string> GetTooLongPaths(string rootPath)
+ {
+ return Directory
+ .EnumerateFileSystemEntries(rootPath, "*.*", SearchOption.AllDirectories)
+ .Where(PathUtilities.IsPathTooLong);
+ }
+
+ /// <summary>Get whether a file or directory path exceeds the OS path length limit.</summary>
+ /// <param name="path">The path to test.</param>
+ internal static bool IsPathTooLong(string path)
+ {
+ try
+ {
+ _ = Path.GetFullPath(path);
+ return false;
+ }
+ catch (PathTooLongException)
+ {
+ return true;
+ }
+ }
}
}