我已經放在一起,根據過去作爲參數的url創建文檔庫中的sharepoint文件夾。代碼起作用,文件夾顯示在web應用程序的共享點中。SharePoint 2010文件夾困境
但是,當我查詢該文件夾的SPWeb對象後,它說該文件夾不存在。這對我來說毫無意義。更奇怪的是,這個相同的代碼在不久之前就起作用了。我一直在使用它來創建共享點中的樹結構。
即使查詢文件夾失敗,GetFolder仍然會返回一個文件夾,但是當我將文件添加到返回的文件夾時,我得到一個運行時異常,指出該文件不存在......我認爲這意味着文件夾我試圖將它添加到不存在,因爲我添加的文件不存在。這就是我加入它的原因。
所以我的問題是,爲什麼我得到這個錯誤,爲什麼FolderExists返回false時,該文件夾實際存在?我們知道它是存在的,因爲GetFolder實際上會返回它...
我已經包含了一些來自應用程序的實際代碼,以使事情清楚。
如果有人可以看看代碼,看看和任何他們跳了出來,這將是fantabulous ...謝謝
代碼來構建文件夾:
public void CreateFolder(SPUriBuilder url)
{
try
{
Log.Instance.WriteToLog("CreateFolder({0})", url);
var library = GetLibrary(url.Library);
if (library != null)
{
// parse out string data
//
var parent = library.RootFolder.ServerRelativeUrl;
var segments = url.Account.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
var path = parent;
// get default folder collection
//
SPFolderCollection subFolders = _web.GetFolder(parent).SubFolders;
// check for sub-folders to create
//
if (segments.Length > 0)
{
int i = 0;
do
{
// check for folder and create if non-existant
//
var buildPath = String.Format("{0}/{1}", path, segments[i]);
if (_web.GetFolder(buildPath).Exists == false)
_web.GetFolder(path).SubFolders.Add(segments[i]);
// retrieve new sub-folder collection
//
subFolders = _web.GetFolder(buildPath).SubFolders;
path = buildPath;
// next folder in path
//
i++;
}
while (i < segments.Length);
}
// finally, add folder of interest
//
subFolders.Add(url.Folder);
}
}
catch (Exception e)
{
throw new SPImportException("Exception: {0}, creating folder: {1} in Library: {2}", e.Message, url.Folder, url.Library);
}
}
代碼查詢文件夾:
public bool FolderExists(SPUriBuilder url)
{
return _web.GetFolder(url.Uri.LocalPath).Exists;
}
代碼獲取文件夾:
private SPFolder GetFolder(SPUriBuilder url)
{
return _web.GetFolder(url.Uri.LocalPath);
}
的SPUriBuilder是一個自定義類,我創建組裝的URI:
public class SPUriBuilder
{
public string SiteUrl { get; private set; }
public string Library { get; private set; }
public string Parent { get; private set; }
public string Folder { get; private set; }
public string File { get; private set; }
public string Account { get; private set; }
public Uri Uri { get; private set; }
public SPUriBuilder(string siteUrl, string library, string account, string parent, string folder)
{
this.SiteUrl = siteUrl;
this.Library = library;
this.Account = account;
this.Parent = parent.Replace("\\", "/");
this.Parent = this.Parent.StartsWith("/") ? this.Parent.Substring(1) : this.Parent;
this.Folder = folder;
StringBuilder url = new StringBuilder();
url.AppendFormat("{0}/{1}/{2}", SiteUrl, Library, Account);
if (String.IsNullOrEmpty(Parent) == false)
url.AppendFormat("/{0}", Parent);
url.AppendFormat("/{0}", Folder);
this.Uri = new Uri(url.ToString());
}
public SPUriBuilder(SPUriBuilder uri, string file)
: this(uri.SiteUrl, uri.Library, uri.Account, uri.Parent, uri.Folder)
{
this.File = file;
StringBuilder url = new StringBuilder();
url.AppendFormat("{0}/{1}", this.Uri.ToString(), this.File);
this.Uri = new Uri(url.ToString());
}
public override string ToString()
{
return Uri.ToString();
}
}
祝賀解決方案。如果可以,請將您的答案標記爲「已接受」,以便其他人可以從您的成功中學習。乾杯〜 –