GetActualCasing can partially fix the path for non-existing paths.

pull/3113/head
kay.one 11 years ago
parent 5dc3a3223d
commit ef32431682

@ -102,30 +102,31 @@ namespace NzbDrone.Common.Test
} }
[Test] [Test]
public void get_actual_casing_for_none_existing_file_should_throw() public void get_actual_casing_for_none_existing_file_return_partially_fixed_result()
{ {
WindowsOnly(); WindowsOnly();
Assert.Throws<DirectoryNotFoundException>(() => "C:\\InValidFolder\\invalidfile.exe".GetActualCasing()); "C:\\WINDOWS\\invalidfile.exe".GetActualCasing().Should().Be("C:\\Windows\\invalidfile.exe");
} }
[Test] [Test]
public void get_actual_casing_should_return_actual_casing_for_local_file_in_windows() public void get_actual_casing_for_none_existing_folder_return_partially_fixed_result()
{ {
WindowsOnly(); WindowsOnly();
var path = Process.GetCurrentProcess().MainModule.FileName; "C:\\WINDOWS\\SYSTEM32\\FAKEFOLDER\\invalidfile.exe".GetActualCasing().Should().Be("C:\\Windows\\System32\\FAKEFOLDER\\invalidfile.exe");
path.ToUpper().GetActualCasing().Should().Be(path);
path.ToLower().GetActualCasing().Should().Be(path);
} }
[Test] [Test]
public void get_actual_casing_should_return_origibal_value_in_linux() public void get_actual_casing_should_return_actual_casing_for_local_file_in_windows()
{ {
LinuxOnly(); WindowsOnly();
var path = Process.GetCurrentProcess().MainModule.FileName; var path = Process.GetCurrentProcess().MainModule.FileName;
path.GetActualCasing().Should().Be(path); path.ToUpper().GetActualCasing().Should().Be(path);
path.GetActualCasing().Should().Be(path); path.ToLower().GetActualCasing().Should().Be(path);
} }
[Test] [Test]
public void get_actual_casing_should_return_actual_casing_for_local_dir_in_windows() public void get_actual_casing_should_return_actual_casing_for_local_dir_in_windows()
{ {

@ -63,23 +63,27 @@ namespace NzbDrone.Common
public static string GetActualCasing(this string path) public static string GetActualCasing(this string path)
{ {
var attributes = File.GetAttributes(path);
if (OsInfo.IsLinux || path.StartsWith("\\")) if (OsInfo.IsLinux || path.StartsWith("\\"))
{ {
return path; return path;
} }
if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) if (Directory.Exists(path) && (File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
{ {
return GetProperCapitalization(new DirectoryInfo(path)); return GetProperCapitalization(new DirectoryInfo(path));
} }
var fileInfo = new FileInfo(path); var fileInfo = new FileInfo(path);
var dirInfo = fileInfo.Directory;
var fileName = fileInfo.Name;
if (dirInfo != null && fileInfo.Exists)
{
fileName = dirInfo.GetFiles(fileInfo.Name)[0].Name;
}
DirectoryInfo dirInfo = fileInfo.Directory; return Path.Combine(GetProperCapitalization(dirInfo), fileName);
return Path.Combine(GetProperCapitalization(dirInfo), dirInfo.GetFiles(fileInfo.Name)[0].Name);
} }
public static string GetAppDataPath(this IAppFolderInfo appFolderInfo) public static string GetAppDataPath(this IAppFolderInfo appFolderInfo)

Loading…
Cancel
Save