我正在尝试在C#中编写一个静态成员函数,或者在.NET Framework中找到一个可以重写文件系统指定文件路径的函数.
例:
string filepath = @"C:\temp.txt"; filepath = FileUtility.RecaseFilepath(filepath); // filepath = C:\Temp.TXT // Where the real fully qualified filepath in the NTFS volume is C:\Temp.TXT
我已经尝试了下面的代码和它的许多变体,它仍然无法正常工作.我知道Windows一般不区分大小写但我需要将这些文件路径传递给ClearCase,后者考虑文件路径大小写,因为它是Unix和Windows应用程序.
public static string GetProperFilePathCapitalization(string filepath) { string result = ""; try { result = Path.GetFullPath(filepath); DirectoryInfo dir = new DirectoryInfo(Path.GetDirectoryName(result)); FileInfo[] fi = dir.GetFiles(Path.GetFileName(result)); if (fi.Length > 0) { result = fi[0].FullName; } } catch (Exception) { result = filepath; } return result; }
Ants.. 22
这是一个非常简单的实现,它假定文件和目录都存在且可访问:
static string GetProperDirectoryCapitalization(DirectoryInfo dirInfo) { DirectoryInfo parentDirInfo = dirInfo.Parent; if (null == parentDirInfo) return dirInfo.Name; return Path.Combine(GetProperDirectoryCapitalization(parentDirInfo), parentDirInfo.GetDirectories(dirInfo.Name)[0].Name); } static string GetProperFilePathCapitalization(string filename) { FileInfo fileInfo = new FileInfo(filename); DirectoryInfo dirInfo = fileInfo.Directory; return Path.Combine(GetProperDirectoryCapitalization(dirInfo), dirInfo.GetFiles(fileInfo.Name)[0].Name); }
但是有一个错误:相对路径被转换为绝对路径.你上面的原始代码做了同样的事情,所以我假设你确实想要这种行为.
这是一个非常简单的实现,它假定文件和目录都存在且可访问:
static string GetProperDirectoryCapitalization(DirectoryInfo dirInfo) { DirectoryInfo parentDirInfo = dirInfo.Parent; if (null == parentDirInfo) return dirInfo.Name; return Path.Combine(GetProperDirectoryCapitalization(parentDirInfo), parentDirInfo.GetDirectories(dirInfo.Name)[0].Name); } static string GetProperFilePathCapitalization(string filename) { FileInfo fileInfo = new FileInfo(filename); DirectoryInfo dirInfo = fileInfo.Directory; return Path.Combine(GetProperDirectoryCapitalization(dirInfo), dirInfo.GetFiles(fileInfo.Name)[0].Name); }
但是有一个错误:相对路径被转换为绝对路径.你上面的原始代码做了同样的事情,所以我假设你确实想要这种行为.