Разница между SPFile и FolderItem (логическая ошибка в коде) - PullRequest
0 голосов
/ 29 декабря 2011
 private void bFolder_Click(object sender, EventArgs e)
    {
        TreeNode currentNode = trvContent.SelectedNode;
        SPObjectData objectData = (SPObjectData)currentNode.Tag;
        using (SPWeb TopLevelWeb = objectData.Web)
        {
            dwnEachWeb(TopLevelWeb);
        }
    }

    private void dwnEachWeb(SPWeb TopLevelWeb)
    {
        if (TopLevelWeb.Webs.Count == 0)
        {
            dwnEachList(TopLevelWeb);
        }
        foreach (SPWeb ChildWeb in TopLevelWeb.Webs)
        {
            dwnEachWeb(ChildWeb);
            ChildWeb.Dispose();
        }
    }

    private void dwnEachList(SPWeb oWeb)
    {
        if (oWeb.Lists.Count != 0)
        {
            foreach (SPList oList in oWeb.Lists)
            {
                if (oList.ItemCount != 0 && oList.Title != "Master Page Gallery")
                {
                    dwnEachFolder(oList.RootFolder);
                }
            }
        }
    }

    private void dwnEachFolder(SPFolder oFolder)
    {
        if (oFolder.SubFolders.Count == 0)
        {
            dwnEachFile(oFolder);
        }
        foreach(SPFolder SubFolder in oFolder.SubFolders)
        {
            dwnEachFolder(SubFolder);
        }
    }

    private void dwnEachFile(SPFolder oFolder)
    {
        if (oFolder.Files.Count != 0)
        {
            foreach(SPFile ofile in oFolder.Files)
            {
                if (CreateDirectoryStructure(tbDirectory.Text, ofile.Url))
                {
                    var filepath = System.IO.Path.Combine(tbDirectory.Text, ofile.Url);
                    byte[] binFile = ofile.OpenBinary();
                    System.IO.FileStream fstream = System.IO.File.Create(filepath);
                    fstream.Write(binFile, 0, binFile.Length);
                    fstream.Close();
                }
            }
        }
    }

    //creating directory        
    private bool CreateDirectoryStructure(string baseFolder, string filepath)
    {
        if (!Directory.Exists(baseFolder)) return false;

        var paths = filepath.Split('/');

        for (var i = 0; i < paths.Length - 1; i++)
        {
            baseFolder = System.IO.Path.Combine(baseFolder, paths[i]);
            Directory.CreateDirectory(baseFolder);
        }
        return true;
    }

Код имеет логическую проблему, пытался отладить, но когда дело доходит до строки кода

foreach(SPFile ofile in oFolder.Files)

в методе dwnEachFile, он просто выходит из метода, не указывая никаких проблем и не создавая никаких каталогов вообще. однако, если я наведу курсор мыши на SPFile, он скажет:

файл на веб-сайте sharepoint, который может быть страницей веб-части, элементом в библиотека документов или файл в папке.

1 Ответ

0 голосов
/ 21 января 2012

Проблема с кодом заключается в том, что я ищу каждый файл в папке и его подпапке в сети, но я должен был просмотреть каждый список и его подсписок в сети, а затем каждую папку библиотеки документов в каждой из список.

Эта ссылка MSDN объясняет все это

MSDN-ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...