我有一个PowerShell脚本,它正在走一个目录树,有时我在那里硬链接的辅助文件不应该被处理.有没有一种简单的方法可以找出文件(即System.IO.FileInfo)是否是硬链接?
如果没有,用符号链接(符号链接)会更容易吗?
有谁知道如何检查文件或目录是符号链接,连接点,挂载点还是硬链接?
据我所知,通过检查文件的"ReparsePoint"属性来检测符号链接.通过检查目录中的"ReparsePoint"属性来检测连接点.因此,如果在文件上设置"ReparsePoint"属性,它必须是符号链接,否则如果它在目录上设置,它只能是一个连接点......对吗?
好到目前为止,但我仍然不知道如何检测"挂载点"和"硬链接".谁能告诉我怎么做?
我更喜欢那些教我如何钓鱼的答案,而不仅仅是给我鱼.就在这时,我不确定我需要在哪里专门回答这个问题. 我已经阅读了有关提升权限和遍历文件系统的文档,并花了一周时间寻找为什么我可以在'User\My Music'上设置DirectoryInfo而不是'User\Documents\My Music'(链接)并且只是在学习更多方面,我会在不同的方向上享受一点点提升.
我捕获了最初在尝试Directory.GetFiles('path',"*",SearchOption.AllDirectories)时抛出的'UnauthorizedAccessException',其中path是用户的"我的文档".为了处理异常,我知道我需要手动遍历目录.哪个有效,从子目录返回文件.
初始GetFiles函数的代码:
public static string[] GetFiles(string path)
{
string[] files;
try
{
files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
}
catch(UnauthorizedAccessException ex)
{ files = WalkDirectory(path); }
return files;
}
public static string[] WalkDirectory(string path)
{
List<string> files = new List<string>();
DirectoryInfo dir = new DirectoryInfo(path);
foreach (DirectoryInfo subDir in dir.GetDirectories())
{
try
{
files.AddRange(WalkDirectory(subDir.FullName));
}
catch(UnauthorizedAccessException ex)
{
// complete fail to walk directory listed
throw ex;
} …Run Code Online (Sandbox Code Playgroud) 我想获取数组目录中的所有文件(包括子文件夹中的文件)
string[] filePaths = Directory.GetFiles(@"c:\",SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)
这个问题是:如果抛出异常,整个命令就会停止.有没有更好的方法来做到这一点,如果一个文件夹无法访问它只会跳过它?
c# ×2
directory ×2
.net ×1
c#-4.0 ×1
exception ×1
file ×1
filesystems ×1
hardlink ×1
powershell ×1
reparsepoint ×1
symlink ×1
windows ×1