我试图显示在所选目录(以及可选的任何子目录)中找到的所有文件的列表.我遇到的问题是,当GetFiles()方法遇到无法访问的文件夹时,它会抛出异常并且进程停止.
如何忽略此异常(并忽略受保护的文件夹/文件)并继续将可访问文件添加到列表中?
try
{
if (cbSubFolders.Checked == false)
{
string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
foreach (string fileName in files)
ProcessFile(fileName);
}
else
{
string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);
foreach (string fileName in files)
ProcessFile(fileName);
}
lblNumberOfFilesDisplay.Enabled = true;
}
catch (UnauthorizedAccessException) { }
finally {}
Run Code Online (Sandbox Code Playgroud) Directory.GetFiles方法在第一次遇到没有访问权限的文件夹时失败.
该方法抛出一个UnauthorizedAccessException(可以捕获),但到此时,该方法已经失败/终止.
我正在使用的代码如下:
try
{
// looks in stated directory and returns the path of all files found
getFiles = Directory.GetFiles(
@directoryToSearch,
filetype,
SearchOption.AllDirectories);
}
catch (UnauthorizedAccessException)
{
}
Run Code Online (Sandbox Code Playgroud)
据我所知,没有办法事先检查某个文件夹是否具有定义的访问权限.
在我的示例中,我正在通过网络搜索磁盘,当我遇到仅限root访问权限的文件夹时,我的程序失败了.
我在另一篇文章中遇到了这段代码,它几乎满足了我的需要,但不知道如何修改它来查找特定的文件类型,即 *.bak、.txt 等。我正在使用 Powershell 和 [System .IO.DirectoryInfo] 因为,就像其他人所说的那样,使用 Get-ChildItem 在网络上太慢了。我认为这只是 $fileEntries = [IO.Directory]::GetFiles("C:\", " .bak") 之类的东西,但它仍然返回每个目录中的每个文件。--PS/.NET新手
try
{
$fileEntries = [IO.Directory]::GetFiles("C:\")
[System.IO.DirectoryInfo]$directInf = New-Object IO.DirectoryInfo("C:\")
$folders = $directInf.GetDirectories()
}
catch [Exception]
{
$_.Exception.Message
$folders = @()
}
foreach($fileName in $fileEntries)
{
#[Console]::WriteLine($fileName);
}
Remove-Variable -ErrorAction SilentlyContinue -Name fileEntries
foreach($folder in $folders)
{
recurse("C:\" + $folder + "\")
}
Run Code Online (Sandbox Code Playgroud) 题
如何以编程方式询问Win7以获取所有当前活动的全局键盘快捷键列表?
脚本
在许多版本的Windows中,有所谓的"Windows Key",又名"flag","start key" 等等.
微软有一个支持文章"键盘快捷键的Windows",列出下的部分很多这样的"Microsoft自然键盘按键",以及许多其他不涉及使用"Windows键",如全球Ctrl+ C,等等.
其他键盘快捷键可以偶然发现.例如,Windows Key + Left arrow或Right arrowWin7将聚焦窗口移动到显示器周围,并且使用多个监视器从一个显示器移动到下一个显示器.
在"选项"设置中还可以找到其他键盘快捷键,例如,Left- Ctrl+ Alt+ K是" Show KeePass Window " 的默认设置.
此外,可能还有硬件特定的键盘快捷键,例如,在我的笔记本电脑上,Fn+ F8切换扬声器静音.
被盗的键盘快捷键
当Snagit运行时,我已将其配置PrtSc为我的快捷方式,但是当Visual Studio(VS)运行时,它会PrtSc从Snagit窃取.
手动发现键盘快捷键的两种耗时方法
(a)通过仅打开桌面和几个窗口并尝试各种键组合,可以发现全局键盘快捷键.
(b)在VS中,可以通过在键盘快捷键窗口中尝试各种组合来发现许多VS键盘快捷键,其中,如果已经使用了组合,VS将通知一个关于该组合的当前使用情况.
想要发现所有当前活动的全局键盘快捷键的两个原因
(a)避免像锁定计算机的Windows Logo Key + 等恼人的事故L.
(b)确定哪些钥匙目前仍可供转让.
如何绕过/忽略 "拒绝访问路径"/ UnauthorizedAccess异常
并继续在此方法中收集文件名;
public static string[] GetFilesAndFoldersCMethod(string path)
{
string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray();
return filenames;
}
Run Code Online (Sandbox Code Playgroud)
//打电话......
foreach (var s in GetFilesAndFoldersCMethod(@"C:/"))
{
Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序在GetFilesAndFoldersCMethod的第一行停止,一个异常说; "拒绝访问路径'C:\ @ Logs \'." 请帮我...
谢谢,
c# ×4
.net ×2
getfiles ×2
file-io ×1
powershell ×1
try-catch ×1
unauthorized ×1
windows ×1
windows-7 ×1