如何在枚举文档库时排除隐藏/系统共享点文件
本文关键字:隐藏 系统 共享 文件 排除 枚举 文档 | 更新日期: 2023-09-27 18:34:06
我正在尝试枚举 SharePoint 文档库中的所有文件,但我想排除表单和文档模板等内容,以及通常不会显示在 AllItems 视图上的任何其他意外项目。
使用资源管理器视图时,它们显示为隐藏文件或文件夹,因此我希望能够以某种方式忽略它们。
IEnumerable<SPFile> GetAllSubContent(SPFolder spFolder)
{
foreach (SPFile spFile in spFolder.Files)
{
yield return spFile;
}
foreach (SPFolder spSubFolder in spFolder.SubFolders)
{
foreach (SPFile spFile in GetAllSubContent(spSubFolder))
{
yield return spFile;
}
}
}
如何使用 SharePoint OM 排除系统文件
选项 1
使用 SPFile.Item 属性排除系统文件(不属于文档库的文件(:
var isSystemFile = (file.Item == null);
例:
IEnumerable<SPFile> GetAllSubContent(SPFolder spFolder)
{
foreach (SPFile spFile in spFolder.Files.Cast<SPFile>().Where(f => f.Item != null))
{
yield return spFile;
}
foreach (SPFolder spSubFolder in spFolder.SubFolders)
{
foreach (SPFile spFile in GetAllSubContent(spSubFolder))
{
yield return spFile;
}
}
}
选项 2
使用 CAML 查询:
IEnumerable<SPFile> GetFiles(SPList list, SPFolder folder)
{
var query = new SPQuery {Folder = folder, ViewAttributes = "Scope='"Recursive'""};
var items = list.GetItems(query);
return from SPListItem item in items select item.File;
}
用法:
var list = web.Lists.TryGetList("Assets");
var files = GetFiles(list, list.RootFolder);
foreach (var file in files)
{
Console.WriteLine(file.Name);
}
要排除隐藏文件,您可以对文件列表执行 linq 查询并过滤掉任何已设置FileAtttributes.Hidden
文件,例如:
IEnumerable<SPFile> GetAllSubContent(SPFolder spFolder)
{
var filteredFileList= spFolder.Files.Select(x => x).Where(x => (x.Attributes & FileAttributes.Hidden) == 0);
foreach (SPFile spFile in filteredFileList)
{
yield return spFile;
}
}
如果要排除某些文件类型,可以使用以下命令:
var filteredFileList = Directory.GetFiles(spFolder).Where(name => !name.EndsWith(".exe")); ''or whatever extension you want to exclude