Как мне узнать, является ли SPListItem документом или папкой? - PullRequest
13 голосов
/ 08 июля 2011

У меня есть цикл, который перебирает библиотеку документов, как в примере ниже.

foreach (SPListItem item in DocumentLibrary)
{
}

Как узнать, является ли SPListItem документом или папкой?

Ответы [ 6 ]

14 голосов
/ 08 июля 2011

Свойство Папка элемента списка будет null, если элемент не является папкой, поэтому вы можете написать:

public bool IsFolder(SPListItem item)
{
    return item.Folder != null;
}

Таким же образом, Файл свойство элемента будет null, если элемент не является документом.Однако в документации не рекомендуется использовать это свойство в этом случае:

Свойство File также возвращает null, если элемент является папкой или элемент не находится в библиотеке документов., хотя не рекомендуется вызывать это свойство в этих случаях.

Альтернативным способом является проверка свойства BaseType списка:

public bool IsDocument(SPListItem item)
{
    return !IsFolder(item)
        && item.ParentList.BaseType == SPBaseType.DocumentLibrary;
}
7 голосов
/ 15 февраля 2014

Использовать перечисление SPFileSystemObjectType . Вот образец ...

foreach (SPListItem item in docLib.Items)
{
    if (item.FileSystemObjectType == SPFileSystemObjectType.Folder)
    {
        // item is a folder 
        ...
    }
    else if (item.FileSystemObjectType == SPFileSystemObjectType.File)
    {
        // item is a file
        ...
    }
}
2 голосов
/ 31 декабря 2011
if( item["ContentType"].ToString() == "Folder")
2 голосов
/ 08 июля 2011
if (item.Folder!=null) 
  // item is Folder and Folder will hold the SPFolder class
1 голос
/ 08 июля 2011

Я думаю, что самый безопасный способ - проверить свойство FileSystemObjectType

0 голосов
/ 15 апреля 2015
if (oitem.ContentType.Name == spWeb.AvailableContentTypes[SPBuiltInContentTypeId.Folder].Name)
                        {
                            Console.WriteLine("Folder Name: " + oitem.Name.ToString());
                        }
...