2011-08-18 99 views
12

我有我的docx.xsl文件在我的项目/斌/调试folder.Now我想访问这个文件,只要我需要。但我无法访问此文件。如何访问Visual studio 2010中项目文件夹中的bin/debug文件?

WordprocessingDocument wordDoc = WordprocessingDocument.Open(inputFile, true); 
MainDocumentPart mainDocPart = wordDoc.MainDocumentPart; 
XPathDocument xpathDoc = new XPathDocument(mainDocPart.GetStream()); 
XslCompiledTransform xslt = new XslCompiledTransform(); 

string xsltFile = @"\\docx.xsl"; // or @"docx.xsl"; 

xslt.Load(xsltFile); 
XmlTextWriter writer = new XmlTextWriter(outputFile, null); 
xslt.Transform(xpathDoc, null, writer); 
writer.Close(); 
wordDoc.Close(); 

请指导我把正确的有效路径访问docx.xsl文件...

+0

为什么不把文件嵌入到可执行文件中作为资源呢?一个文件少部署,无路径麻烦 – adrianm

+0

@Adrianm:我该怎么做?你可以给我一个程序吗? – Saravanan

+0

要在很多代码放置评论,所以我添加了一个答案 – adrianm

回答

26

你可以决定你的可执行文件的位置,并假设该文件将与应用程序相关的部署目录,那么这应该可以帮助您查找文件中的调试和部署:

string executableLocation = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().Location); 
string xslLocation = Path.Combine(executableLocation, "docx.xsl"); 

您可能需要在你的文件的顶部输入下面的命名空间:

using System; 
using System.IO; 
using System.Reflection; 
+0

错误消息:名称大会不存在的上下文?..我如何把名字空间? – Saravanan

+0

让我用相关的命名空间更新... –

+0

using System.Reflection;非常感谢 – Saravanan

1

Application.StartupPath为您提供了bin/debug的完整路径。

所以,你需要做的是:

string xsltFile =Application.StartupPath + @"\\docx.xsl"; 
+1

对不起,它没有工作... – Saravanan

+0

正确的是:string xsltFile = Application.StartupPath + @“\\ docx.xsl”;非常感谢 – Saravanan

7

如果添加的文件作为资源你不需要处理在运行时路径。

  • 将文件添加到Visual Studio项目并将构建操作设置为“Embedded Resource”。

资源的名称是项目默认名称空间+任何文件夹,就像项目中的任何代码文件一样。

string resourceName = "DefaultNamespace.Folder.docx.xsl"; 

如果在同一个文件夹中的代码,你可以像这样

string resourceName = string.Format("{0}.docx.xsl", this.GetType().Namespace); 
  • 然后你阅读使用资源流Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)

在你的情况的文件,它看起来像这样:

using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
using (var reader = XmlReader.Create(stream)) 
    xslt.Load(reader); 
+0

非常感谢adrianm – Saravanan

-1

为了从Bin/Debug文件夹访问文件,只需指定文件名。见下面

xslt.Load("docx.xsl"); 
相关问题