从SharePoint的_layouts文件夹获取文件

5

我目前正在一个项目上工作,其中我将docx文件添加到Visual Studio的Layout文件夹中,然后使用这些文档文件来创建内容类型。

问题在于我无法通过编程方式获取文档文件。使用Web浏览器可以获取文件,但不能使用web.GetFolder()方法。该代码是在功能接收器中运行的,当功能激活时执行。

SPSite site = properties.Feature.Parent as SPSite;
SPWeb web = site.RootWeb;

SPFolder docTempFolder = web.GetFolder("_LAYOUTS/Projekt/DocumentTemplates");

这段代码给了我一个没有文件的集合。
我做错了什么?
谢谢帮助。

可能是以编程方式获取12 Hive目录路径的重复问题。 - Goyuix
1个回答

7

SPFolder 用于从 SharePoint 文档库/列表中获取对象。您无法通过将其强制转换为 SPFolder 来访问文件系统(14 hive)中的文件。同时,您也无法使用 SPWeb.GetFolder,因为这些文件不在您的网站附近,而是在您的硬盘上。

您可以通过使用 GetGenericSetupPath 来获取 14 hive,因此可以尝试以下内容:

var path = SPUtility.GetGenericSetupPath(@"TEMPLATE\LAYOUTS\Projekt\DocumentTemplates");

现在,您可以使用常规流读取器(System.IO.File等)访问此路径。


编辑:对于SharePoint 2013及以上版本,上述方法已过时,因为在新版本的SharePoint中,对_layouts文件夹的引用始终包含路径中的SharePoint版本(例如,在SharePoint 2013中为/_layouts/15,在SharePoint 2010中为/_ layouts / 14 )。

新方法是SPUtility.GetVersionedGenericSetupPath。该方法在SharePoint 2010中不存在。


1
我知道这已经过时了,但人们会在谷歌上找到它。在SP2013中,这已经过时了。http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.utilities.sputility.getgenericsetuppath.aspx - Anthony Graglia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接