由另一个进程访问的文件

本文关键字:文件 访问 进程 另一个 | 更新日期: 2023-09-27 18:31:50

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

更糟糕的是,它每 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();
                            }
                        }
                    });   

错误

无法访问文件,即使我稍后再试一次,它也工作正常。

由另一个进程访问的文件

我会尝试使用 using 语句封装打开/关闭逻辑

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

这将关闭流,但也会处理它。

您是否尝试过用这样的锁将其设置为线程安全?

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 子句中关闭写入流。