我正在尝试枚举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;
}
}
}
答案 0 :(得分:1)
要排除隐藏文件,您可以对文件列表执行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
答案 1 :(得分:1)
选项1
使用SPFile.Item Property排除系统文件(那些不属于文档库的文件):
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);
}