Jer*_*rds 21 .net c# filenames case-sensitive filepath
我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下面的代码和它的许多变体,它仍然无法正常工作.我知道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;
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*nts 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);
}
Run Code Online (Sandbox Code Playgroud)
但是有一个错误:相对路径被转换为绝对路径.你上面的原始代码做了同样的事情,所以我假设你确实想要这种行为.
归档时间: |
|
查看次数: |
8991 次 |
最近记录: |