私の c# プログラム (Visual Studio 2010 を使用) で、SharePoint ドキュメント ライブラリにファイルをアップロードしています。ファイルをアップロードするには、まずファイルのバイトを byte[] 配列に読み込みます。次に、配列をファイルとしてドキュメント ライブラリにアップロードします。各ファイルをアップロードする前にメモリをクリアする方法が必要です。
プログラムは、ディレクトリ内で繰り返されるループでファイルをアップロードします。byte[] 配列のメモリをクリアする方法はありますか?
実際、プロセス「sqlservr.exe*32」を再起動してメモリを解放する方法はありますか?
これは、アップロードに使用するコードです。
そして、私がウェブサイトに表示するエラーメッセージは次のとおりです(問題が発生した場合、メモリ不足であると思われます。メッセージ内の別のファイルも時々表示されます):URL 'Test Library/myfolder/file.txt' は無効です. 存在しないファイルまたはフォルダを参照しているか、現在の Web にない有効なファイルまたはフォルダを参照している可能性があります。
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.IO;
using Microsoft.SharePoint;
namespace CustomApplicationPage.Layouts.CustomApplicationPage
{
public partial class CustomApplicationPage : LayoutsPageBase
{
protected void Page_Load(object sender, EventArgs e)
{
// Check if user posted a file
if (File1.PostedFile == null)
{
return;
}
try
{
// Get the directories in the path
string[] array1 = Directory.GetDirectories("C:\\myfolder\\");
// Declare variables
string[] temp;
byte[] contents;
string dir_name;
string file_name;
int i, j;
int chunk_size = 5;
int chunk_index = 0;
int start_id = chunk_size * chunk_index;
int end_id = 1 + (chunk_size * (chunk_index+1));
// Free the memory
GC.Collect();
// For each directory in the main path
for (i = 0; i < array1.Length; i++)
{
// Get directory name
dir_name = Path.GetFileName(array1[i]);
// Skip this file
if (dir_name == "viDesktop_files" || i < start_id || i >= end_id)
{
continue;
}
// Get the site
SPSite site = new Microsoft.SharePoint.SPSite("http://mysite/");
// Turn security off
Microsoft.SharePoint.Administration.SPWebApplication webApp = site.WebApplication;
webApp.FormDigestSettings.Enabled = false;
// Get site root
SPWeb spWeb = site.RootWeb;
// Get the specified list/library from the site root
SPList docLib = spWeb.Lists["Test Library"];
// Get all files in the directory
temp = Directory.GetFiles(array1[i]);
// Create a folder in the list/library
SPListItem folder = docLib.Folders.Add(docLib.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, dir_name);
// Activate the newly created folder
folder.Update();
// For each file in the directory
for (j = 0; j < temp.Length; j++)
{
// Get file name
file_name = Path.GetFileName(temp[j]);
// If the file is a .mht file
if (file_name.EndsWith(".mht"))
{
// Read the contents of the uploaded file into the variable 'contents'
contents = File.ReadAllBytes(temp[j]);
// Add the file with the specified filename in the folder
SPFile file = folder.Folder.Files.Add(file_name, contents);
// Activate the file
file.Update();
}
}
// Turn security on
webApp.FormDigestSettings.Enabled = true;
// Close the site
site.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}