2011-08-18 20 views
12

Mam plik docx.xsl w folderze project/bin/debug. Teraz chcę uzyskać dostęp do tego pliku, gdy potrzebuję. Nie mogłem jednak uzyskać dostępu do tego pliku.Jak uzyskać dostęp do plików w bin/debug w folderze projektu w Visual Studio 2010?

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(); 

proszę kierować do mnie postawić prawidłową prawidłową ścieżkę dostępu do pliku docx.xsl ...

+0

Dlaczego zamiast tego nie należy umieszczać pliku w pliku wykonywalnym jako zasobu? Jeden plik mniej do wdrożenia i bez problemów z ścieżkami – adrianm

+0

@Adrianm: Jak to robię? Czy mógłbyś dać mi procedurę? – Saravanan

+0

Za dużo kodu, aby wstawić komentarz, więc dodałem odpowiedź – adrianm

Odpowiedz

26

można określić lokalizację pliku wykonywalnego, a zakładając, że plik zostanie wdrożony z wnioskiem do właściwego katalog, to powinno pomóc znaleźć plik w debugowania i wdrażania:

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

może potrzebne są następujące przestrzenie nazw importowanych na górze pliku:

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

Komunikat o błędzie: -Zespół nazwy nie istnieje w kontekście? .. w jaki sposób umieścić obszar nazw? – Saravanan

+0

Pozwól mi zaktualizować z odpowiednimi przestrzeniami nazw ... –

+0

przy użyciu System.Reflection; Wielkie dzięki – Saravanan

1

Application.StartupPath podaje pełną ścieżkę do bin/debugowania.

Więc co trzeba zrobić, to:

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

Niestety To nie działa ... – Saravanan

+0

Popraw to: string xsltFile = Application.StartupPath + @ "\\ docx.xsl"; Wielkie dzięki – Saravanan

7

Jeśli dodać plik jako zasobu nie trzeba radzić sobie ze ścieżkami przy starcie.

  • Dodaj plik do projektu Visual Studio i ustaw akcję budowania na "Embedded Resource".

Nazwa zasobu to domyślny obszar nazw projektu + dowolne foldery, tak jak każdy plik kodu w projekcie.

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

Jeśli masz kod w tym samym folderze, można zrobić jak ten

string resourceName = string.Format("{0}.docx.xsl", this.GetType().Namespace); 
  • wtedy odczytać pliku przy użyciu strumienia zasobów Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)

W przypadku, Wyglądałoby to tak:

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

dziękuję bardzo adrianm – Saravanan

-1

Aby uzyskać dostęp do pliku z folderu Bin/Debug, wystarczy podać nazwę pliku. Zobacz poniżej:

xslt.Load("docx.xsl"); 
Powiązane problemy