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

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

foreach (SPListItem item in DocumentLibrary)
{
}

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

Ответ 1

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

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

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

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

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

public bool IsDocument(SPListItem item)
{
    return !IsFolder(item)
        && item.ParentList.BaseType == SPBaseType.DocumentLibrary;
}

Ответ 2

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

foreach (элемент SPListItem в docLib.Items)
{
if (item.FileSystemObjectType == SPFileSystemObjectType. Папка)
{
//item - это папка
...
}
else if (item.FileSystemObjectType == SPFileSystemObjectType. Файл)
{
//item - файл
...
}
}

Ответ 3

if (item.Folder!=null) 
  // item is Folder and Folder will hold the SPFolder class

Ответ 4

if( item["ContentType"].ToString() == "Folder")

Ответ 5

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

Ответ 6

if (oitem.ContentType.Name == spWeb.AvailableContentTypes[SPBuiltInContentTypeId.Folder].Name)
                        {
                            Console.WriteLine("Folder Name: " + oitem.Name.ToString());
                        }