我的project / bin / debug文件夹中有docx.xsl文件。现在我想在需要时访问此文件。但我无法访问此文件。
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 :(得分:36)
您可以确定可执行文件的位置,并假设该文件将随应用程序一起部署到相关目录,那么这应该可以帮助您在调试和部署中找到该文件:
string executableLocation = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location);
string xslLocation = Path.Combine(executableLocation, "docx.xsl");
您可能需要在文件顶部导入以下命名空间:
using System;
using System.IO;
using System.Reflection;
答案 1 :(得分:7)
如果将文件添加为资源,则无需在运行时处理路径。
资源的名称是项目默认名称空间+任何文件夹,就像项目中的任何代码文件一样。
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);
答案 2 :(得分:1)
Application.StartupPath
为您提供bin / debug的完整路径。
所以你需要做的是:
string xsltFile =Application.StartupPath + @"\\docx.xsl";
答案 3 :(得分:-3)
要从Bin / Debug文件夹访问文件,您只需指定文件名。见下文
xslt.Load("docx.xsl");