如果我有两个DirectoryInfo对象,我如何比较它们的语义相等?例如,以下路径应全部视为等于C:\temp:
C:\tempC:\temp\C:\temp\.C:\temp\x\..\..\temp\.以下可能等于或不等于C:\temp:
\temp 如果当前工作目录在驱动器上 C:\temp 如果当前工作目录是 C:\C:\temp.C:\temp...\如果考虑当前的工作目录很重要,我可以自己解决这个问题,所以这并不重要.尾随点在窗口中被剥离,因此这些路径确实应该相等 - 但它们不会在unix中被剥离,所以在mono下我会期望其他结果.
区分大小写是可选的.路径可能存在也可能不存在,用户可能拥有或可能没有路径权限 - 我更喜欢快速健壮的方法,不需要任何I/O(所以没有权限检查),但是如果有什么内置的话 - 我对任何"足够好"的东西都很满意......
在参考了很多博客和文章之后,我已经达到了以下代码,用于在文件夹内的所有文件中搜索字符串.它在我的测试中运行良好.
质询
注意:我测试了非常小的文件.文件数量也很少.
码
static void Main()
{
string sourceFolder = @"C:\Test";
string searchWord = ".class1";
List<string> allFiles = new List<string>();
AddFileNamesToList(sourceFolder, allFiles);
foreach (string fileName in allFiles)
{
string contents = File.ReadAllText(fileName);
if (contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}
Console.WriteLine(" ");
System.Console.ReadKey();
}
public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
{
string[] fileEntries = Directory.GetFiles(sourceDir);
foreach (string fileName in fileEntries)
{
allFiles.Add(fileName);
}
//Recursion
string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach (string item in subdirectoryEntries)
{
// Avoid "reparse points" …Run Code Online (Sandbox Code Playgroud) 有没有办法告诉使用C#文件是真实的还是符号链接?
我已经通过MSDN W32文档(http://msdn.microsoft.com/en-us/library/aa364232(VS.85).aspx)进行了挖掘,并且找不到任何可用于检查的内容.我从这里使用CreateSymbolicLink,它工作正常.
我在文件大小和已用磁盘空间之间存在差异(总文件大小甚至超过磁盘大小).我想因为在Windows 7/Vista中存在许多硬链接(对于WinSxS组件).但是,如何以编程方式将硬链接与Windows 7中的真实文件区分开来?