从SharePoint中的_layouts文件夹中获取文件

时间:2012-06-19 09:40:03

标签: c# sharepoint spweb

我目前正在开发一个项目,我将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");

这段代码给了我一个零文件的集合。

我做错了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

SPFolder用于从SharePoint文档库/列表中获取对象。您无法通过尝试将其转换为SPFolder来访问文件系统(14个配置单元)中的文件。此外,您无法使用SPWeb.GetFolder,因为文件远离您的网络。它们在你的硬盘上。

你可以使用GetGenericSetupPath获得14个配置单元,所以这样的东西可以工作:

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

您现在可以使用常规流阅读器System.IO.File等访问此路径


编辑:对于SharePoint 2013及更高版本,上述方法已过时,因为在较新的SharePoint版本中,对_layouts文件夹的引用始终在路径中包含SharePoint版本(例如{{1}适用于SharePoint 2010的SharePoint 2013 /_layouts/15

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