0

ドキュメント ライブラリから多数のファイルを取得し、それらをサーバー上のフォルダー ディレクトリにダウンロードしている運用サーバーでこれらの例外がスローされることにうんざりしています。

さらに悪いことに、それは 10 に 1 回、または 20 に 1 回発生するということです。

なんとか改善できればこのコードを使っていますが、

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();
                            }
                        }
                    });   

エラー

しばらくしてからもう一度試してみても、ファイルにアクセスできませんでした。

4

2 に答える 2

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 句で閉じられていることを確認します。

于 2013-09-18T10:32:31.610 に答える
0

using ステートメントを使用して、オープン/クローズ ロジックをカプセル化しようとします。

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

これにより、ストリームが閉じられますが、破棄されます。

于 2013-09-18T10:32:03.520 に答える