我希望从我的驱动器递归获取所有文件,并使用system.io.directory中的enumeratefiles,如下所示:
public List<Employees> GetEmployees()
{
SqlCommand cmd = new SqlCommand("select * from Employees T where T.Account_ID in (select A.Account_ID from Accounts A where Empl_ID = 1)", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
工作正常,但很多行都包含隐藏文件或系统文件。
我使用了ennumeratefiles,因为j:驱动器非常大,这个函数比同等的PowerShell cmdlet工作得快,效果好。
如何测试这些文件类型?
有关如何从enumeratefiles中为c ++排除这些文件类型的内容,但也不包括powershell,我不知道如何更改powershell的代码:
c++ file hidden or system
答案 0 :(得分:0)
使用System.IO.FileInfo
和一点-bor
枚举魔法将让您想要。
下面的示例将打印包含属性Hidden
或System
的任何项目的完整路径。
$hidden_or_system = [System.IO.FileAttributes]::Hidden -bor [System.IO.FileAttributes]::System
[System.IO.Directory]::EnumerateFiles("J:\","*","AllDirectories") | ForEach-Object {
if ([System.IO.FileInfo]::new($_).Attributes -band $hidden_or_system) {
"A hidden or system item: $_"
}
}
请注意,如果您遇到无权访问终止错误的文件或文件夹将停止执行,您可以通过恢复到内置cmdlet来解决此问题,因为它们会抛出非终止错误并继续。
$hidden_or_system = [System.IO.FileAttributes]::Hidden -bor [System.IO.FileAttributes]::System
Get-ChildItem -Path 'J:' -Recurse -Force | ForEach-Object {
if ($_.Attributes -band $hidden_or_system) {
"A hidden or system item: $($_.FullName)"
}
}
答案 1 :(得分:0)
感谢您的建议。
当您获得&#34;隐藏&#34;的文件属性时文件有时候powershell会抛出一个非终止错误。
我使用以下建议解决了问题:
[System.IO.Directory]::EnumerateFiles("J:\","*","AllDirectories")|out-file -Encoding ascii $outputfile
foreach($line in select-string -Path $outputfile) {
# Some of the $line is the name of a hidden or system file
if ((Get-ItemProperty $line -ErrorAction SilentlyContinue).attributes -band [io.fileattributes]::Hidden) {continue}
if (-not $?) {continue}
# Is the file a system file?
if ((Get-ItemProperty $line -ErrorAction SilentlyContinue).attributes -band [io.fileattributes]::System) {continue}
if (-not $?) {continue}
#
# Do the work here...
#
}