另一个进程访问的文件

时间:2013-09-18 10:28:15

标签: c# web-services sharepoint

我厌倦了在生产服务器上抛出这些异常,我从文档库中获取大量文件并将其下载到服务器上的文件夹目录。

更糟糕的是,它发生在10或者20或者一次,它是安静的随机,根本没有模式。

如果我能以某种方式改进它,我正在使用此代码,

SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite spSite = new SPSite(siteUrl))
                        using (SPWeb spWeb = spSite.OpenWeb())
                        {
                            SPDocumentLibrary library = spWeb.Lists[listName] as SPDocumentLibrary;

                            foreach (SPListItem listItem in library.Items)
                            {
                                SPFile file = listItem.File;
                                byte[] document = file.OpenBinary();
                                System.IO.Directory.CreateDirectory(Path);
                                System.IO.FileStream stream = System.IO.File.Create(Path + file.Name);
                                stream.Write(document, 0, document.Length);
                                stream.Close();
                            }
                        }
                    });   

错误

无法访问文件,即使我在一会儿再试一次也能正常工作。

2 个答案:

答案 0 :(得分:0)

我会尝试使用using statement

封装打开/关闭逻辑
using(FileStream stream = System.IO.File.Create(Path + file.Name))
{
    stream.Write(document, 0, document.Length);
}

这将关闭流,但也会将其丢弃。

答案 1 :(得分:0)

您是否尝试使用此类锁定将其转为线程安全?:

lock(Path + file.Name) {
    System.IO.Directory.CreateDirectory(Path);
    System.IO.FileStream stream = System.IO.File.Create(Path + file.Name);
    stream.Write(document, 0, document.Length);
    stream.Close();
}

并且还打开共享的文件,并确保在catch子句中关闭写入流。