我厌倦了在生产服务器上抛出这些异常,我从文档库中获取大量文件并将其下载到服务器上的文件夹目录。
更糟糕的是,它发生在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();
}
}
});
错误
无法访问文件,即使我在一会儿再试一次也能正常工作。
答案 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子句中关闭写入流。