C# 检索文件集合并将其保存在本地目录中

C# 检索文件集合并将其保存在本地目录中,c#,sharepoint,filestream,C#,Sharepoint,Filestream,我在将Sharepoint文件集的图片保存到本地目录时遇到问题。我是Sharepoint 2016的新手,在解决此问题时遇到了一些问题。似乎当我运行这段代码时,它第一次传递给我文件集合的第一个图像。但是,当我查看目标目录时,图像是0字节(只是一个空文件)。在它保持运行一段时间后,它抛出以下异常错误 错误: 其他信息:无法从传输连接读取数据:远程主机强制关闭了现有连接 好的,我发现逻辑是错误的,我在for-each循环外有一行,当我为每个代码调用它时,它使它变为空。这就是我的文件显示为0字节的原因

我在将Sharepoint文件集的图片保存到本地目录时遇到问题。我是Sharepoint 2016的新手,在解决此问题时遇到了一些问题。似乎当我运行这段代码时,它第一次传递给我文件集合的第一个图像。但是,当我查看目标目录时,图像是0字节(只是一个空文件)。在它保持运行一段时间后,它抛出以下异常错误

错误:
其他信息:无法从传输连接读取数据:远程主机强制关闭了现有连接


好的,我发现逻辑是错误的,我在for-each循环外有一行,当我为每个代码调用它时,它使它变为空。这就是我的文件显示为0字节的原因

修正码

    public static void ImageRetrival(PHG.OneDrive.Helpers.OneDriveHelper oneDrive, string user)
    {

        try
        {
            var wb = userContext.Web;
            userContext.Load(wb);
            var files = oneDrive.GetOneDriveFilesByFolderName(user);

            if (files != null)
            {

                foreach (var file in files)
                {
                    // has to be inside my foreach loop referencing file in files which represents a sharepoint filecollection 
                    var fileinfo  = Microsoft.SharePoint.Client.File.OpenBinaryDirect(userContext, file.ServerRelativeUrl);
                    var fileName = file.Name.ToString();
                    string path = @"C:\Top-Level\" + fileName;
                    using (var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    {
                        fileinfo.Stream.CopyTo(fs);
                    }

                }
            }

        }
        catch (Exception e)
        {
            throw e;
        }

    }

看看这里的@JonSkeets示例,我认为@Method man要干净得多,我让它工作起来更符合逻辑顺序,而不是代码。请看一下更正。
    public static void ImageRetrival(PHG.OneDrive.Helpers.OneDriveHelper oneDrive, string user)
    {

        try
        {
            var wb = userContext.Web;
            userContext.Load(wb);
            var files = oneDrive.GetOneDriveFilesByFolderName(user);

            if (files != null)
            {

                foreach (var file in files)
                {
                    // has to be inside my foreach loop referencing file in files which represents a sharepoint filecollection 
                    var fileinfo  = Microsoft.SharePoint.Client.File.OpenBinaryDirect(userContext, file.ServerRelativeUrl);
                    var fileName = file.Name.ToString();
                    string path = @"C:\Top-Level\" + fileName;
                    using (var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    {
                        fileinfo.Stream.CopyTo(fs);
                    }

                }
            }

        }
        catch (Exception e)
        {
            throw e;
        }

    }