Как указать путь к файлу в visual studio
Члены большинства типов в пространстве имен System.IO имеют параметр path , который позволяет указать абсолютный или относительный путь к ресурсу в файловой системе. Этот путь передается в API файловой системы Windows. В этом разделе рассматриваются форматы путей к файлам, которые можно использовать в операционных системах Windows.
Традиционные пути DOS
Стандартный путь DOS может состоять из трех компонентов:
- Буква тома или диска, после которой следует разделитель томов ( : ).
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана и имя каталога начинается с символа разделителя каталогов, такой путь задан относительно корня текущего диска. В противном случае путь задан относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Путь | Описание: |
---|---|
C:\Documents\Newsletters\Summer2018.pdf | Абсолютный путь к файлу из корня диска C: . |
\Program Files\Custom Utilities\StringFinder.exe | Абсолютный путь из корня текущего диска. |
2018\January.xlsx | Относительный путь к файлу в подкаталоге текущего каталога. |
..\Publications\TravelBrochure.pdf | Относительный путь к файлу в каталоге, начиная с текущего каталога. |
C:\Projects\apilibrary\apilibrary.sln | Абсолютный путь к файлу из корня диска C: . |
C:Projects\apilibrary\apilibrary.sln | Относительный путь из текущего каталога диска C: . |
Обратите внимание на различия между двумя последними путями. В обоих случаях задается необязательный описатель тома ( C: ), однако первый путь, в отличие от второго, начинается с корня указанного тома. В результате первый путь является абсолютным из корневого каталога диска C: , тогда как второй — относительным из текущего каталога C: . Использование второй формы пути в тех случаях, когда предполагается наличие первой, является распространенным источником ошибок, связанных с путями к файлам в Windows.
Чтобы определить, является ли путь к файлу полным (такой путь не зависит от текущего каталога и не изменяется при смене текущего каталога), можно вызвать метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты с относительным путем к каталогу ( . и .. ), но при этом по-прежнему будет полным, если разрешенный путь всегда указывает на одно и то же место.
В приведенном ниже примере показано различие между абсолютными и относительными путями. Предполагается, что каталог D:\FY2018\ существует и вы не установили какой-либо текущий каталог для диска D:\ из командной строки перед запуском этого примера.
Если вы хотите увидеть комментарии к коду, переведенные на языки, отличные от английского, сообщите нам на странице обсуждения этой проблемы на сайте GitHub.
UNC-пути
UNC-пути (универсальное соглашение об именовании) используются для доступа к сетевым ресурсам и имеют следующий формат:
- Имя сервера или узла, которому предшествуют символы \\ . В качестве имени сервера может выступать имя компьютера NetBIOS, а также IP-адрес или полное доменное имя (поддерживаются адреса IPv4 и IPv6).
- Имя общего ресурса, которое отделяется от имени узла символами \ . Имя сервера и имя общего ресурса в совокупности образуют том.
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Ниже приводятся некоторые примеры UNC-путей:
Path | Описание |
---|---|
\\system07\C$\ | Корневой каталог диска C: на компьютере system07 . |
\\Server2\Share\Test\Foo.txt | Файл Foo.txt в тестовом каталоге тома \\Server2\Share . |
UNC-пути всегда должны быть полными. Они могут включать сегменты с относительным путем к каталогу ( . и .. ), однако они должны быть частью полного пути. Использовать относительные пути можно только посредством сопоставления UNC-пути с буквой диска.
Пути к устройствам DOS
В операционной системе Windows используется унифицированная объектная модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и предоставляются на уровень Win32 с использованием специальной папки с символьными ссылками, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с использованием синтаксиса пути к устройству DOS, который может иметь одну из приведенных ниже форм:
Помимо использования буквы диска, вы можете указать том с помощью его GUID. Синтаксис будет иметь вид:
Путь к устройству DOS состоит из следующих компонентов:
Описатель пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.
Символьная ссылка на "реальный" объект устройства (C: в случае имени диска или Volume в случае GUID тома).
Первый сегмент пути к устройству DOS после описателя пути к устройству идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)
Для UNC-путей существует специальная ссылка, которая называется UNC . Пример:
Для UNC-путей к устройствам часть сервера или общего сетевого ресурса образует том. Например, в пути \\?\server1\e:\utilities\\filecomparer\ часть server1\utilities представляет сервер или общий сетевой ресурс. Это важно при вызове такого метода, как Path.GetFullPath(String, String) с сегментами с относительным путем к каталогу, поскольку переход дальше тома невозможен.
Пути к устройствам DOS являются полными по определению и не могут начинаться с относительным сегментом каталога ( . или .. ). Они никогда не задаются относительно текущего каталога.
Пример. Способы задать ссылку на один и тот же файл
В следующем примере демонстрируются некоторые способы задать ссылку на файл с использованием API в пространстве имен System.IO. В этом примере создается экземпляр объекта FileInfo и используются его свойства Name и Length, чтобы отобразить имя и длину файла.
Нормализация путей
Практически все передаваемые в API Windows пути нормализуются. При нормализации в Windows выполняются следующие действия:
- Идентифицируется путь.
- Текущий каталог применяется к неполным (относительным) путям.
- Выполняется канонизация разделителей каталогов.
- Вычисляются относительные компоненты каталога ( . для текущего и .. для родительского каталога).
- Удаляются некоторые символы.
Нормализация происходит неявно, но ее можно выполнить явным образом, вызвав Path.GetFullPath метод, который создает оболочку для вызова функции жетфуллпаснаме (). Также можно вызвать функцию GetFullPathName() Windows напрямую с помощью P/Invoke.
Идентификация пути
На первом шаге процесса нормализации осуществляется идентификация типа пути. Пути могут относиться к одной из нескольких категорий:
- Пути к устройствам: начинаются с двух разделителей и знака вопроса или точки ( \\? или \\. ).
- UNC-пути: начинаются с двух разделителей без знака вопроса или точки.
- Полные пути DOS: начинаются с буквы диска, разделителя томов и компонентов ( C:\ ).
- Пути к устаревшим устройствам ( CON , LPT1 ).
- Пути относительно корня текущего диска: начинаются с одного разделителя компонентов ( \ ).
- Пути относительно текущего каталога указанного диска: начинаются с буквы диска и разделителя томов, но не содержат разделителя компонентов ( C: ).
- Пути относительно текущего каталога: начинаются с любых других символов ( temp\testfile.txt ).
Тип пути определяет, будет ли каким-либо образом применяться текущий каталог. Кроме того, от типа пути зависит применяемый корень.
Работа с устаревшими устройствами
Если путь указывает на устаревшее устройство DOS, например CON , COM1 или LPT1 , он преобразуется в путь к устройству путем добавления перед ним последовательности \\.\ и возвращается в таком виде.
Путь, который начинается с имени устаревшего устройства, всегда интерпретируется как путь к устаревшему устройству с помощью метода Path.GetFullPath(String). Например, путь к устройству DOS CON.TXT будет выглядеть как \\.\CON , а путь к устройству DOS COM1.TXT\file1.txt будет выглядеть как \\.\COM1 .
Применение текущего каталога
Если путь не является полным, система Windows применяет к нему текущий каталог. К UNC-путям и путям к устройствам текущий каталог не применяется. Также текущий каталог не применяется к полным путям к диску с разделителем C:\ .
Если путь начинается с одного разделителя компонентов, применяется диск текущего каталога. Например, для пути к файлу \utilities и текущего каталога C:\temp\ в результате нормализации будет получен путь C:\utilities .
Если путь начинается с буквы диска, разделителя томов и не содержит разделителя компонентов, применяется последний текущий каталог, установленный из командной оболочки. Если последний текущий каталог не был установлен, применяется диск сам по себе. Например, для пути D:sources , текущего каталога C:\Documents\ и последнего текущего каталога D:\sources\ на диске D: в результате будет получен путь D:\sources\sources . Пути, задаваемые относительно диска, являются распространенными источниками ошибок программ и логики скрипта. Предположение, что путь, начинающийся с буквы и двоеточия, не является относительным, очевидно неверно.
Если путь не начинается с разделителя, применяются текущий диск и текущий каталог. Например, для пути к файлу filecompare и текущего каталога C:\utilities\ в результате будет получен путь C:\utilities\filecompare\ .
Канонизация разделителей
Все символы косой черты ( / ) преобразуются в стандартные разделители Windows, то есть символы обратной косой черты ( \ ). Если они присутствуют, последовательность символов косой черты после первых двух таких символов свертывается в один символ косой черты.
Вычисление относительных компонентов
При обработке пути выполняется вычисление любых его компонентов или сегментов, которые состоят из одной или двух точек ( . или .. ):
Если обнаруживается одна точка, текущий сегмент удаляется, поскольку он ссылается на текущий каталог.
Если обнаруживаются две точки, удаляются текущий и родительский сегмент, поскольку в этом случае задается ссылка на родительский каталог.
Родительские каталоги удаляются только в том случае, если они не находятся после корня пути. Корень пути зависит от его типа. Это будет диск ( C:\ ) для путей DOS, сервер или общий сетевой ресурс для UNC-путей ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).
Удаление знаков
Помимо удаленных ранее разделителей и относительных сегментов во время нормализации также удаляются некоторые дополнительные знаки:
Если сегмент заканчивается одной точкой, эта точка удаляется. (Сегмент одной или двойной точки нормализован на предыдущем шаге. Сегмент из трех или более периодов не нормализован и действительно является допустимым именем файла или каталога.)
Если путь не заканчивается разделителем, удаляются все конечные точки и пробелы (U+0020). Если последний сегмент содержит только одну или две точки, к нему применяется приведенное выше правило для относительных компонентов.
Это правило устанавливает, что вы можете создать имя каталога с конечным пробелом, добавив разделитель после пробела.
Создавать имена каталогов или файлов с конечным пробелом нельзя. Наличие конечных пробелов может затруднить или исключить возможность доступа к каталогу. В связи с этим при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы, происходит сбой приложения.
Пропуск нормализации
Как правило, любой путь, передаваемый в API Windows передается в функцию GetFullPathName и нормализуется. Существует одно важное исключение: путь к устройству, который начинается со знака вопроса, а не с точки. Если путь не начинается с последовательности \\?\ (обратите внимание на использование канонической формы с обратной косой чертой), он нормализуется.
Зачем нужно пропускать нормализацию? Существует три основных причины:
Получение путей, которые в обычных обстоятельствах недоступны, но являются допустимыми. Например, невозможно каким-либо иным способом получить доступ к файлу или каталогу с именем hidden. .
Повышение производительности за счет пропуска нормализации в тех случаях, когда нормализация уже выполнена.
Пропуск нормализации и проверки максимальной длины пути является единственным отличием между двумя видами синтаксиса путей к устройствам. В остальных аспектах они идентичны. Пропуск нормализации следует использовать с осторожностью, поскольку в этом случае легко получить пути, при работе с которыми в обычных приложениях будут возникать трудности.
Пути, начинающиеся с последовательности \\?\ , по-прежнему нормализуются, если явно передать их в функцию GetFullPathName.
Вы можете передавать пути длиной более MAX_PATH символов в функцию GetFullPathName без \\?\ . Она поддерживает пути произвольной длины, которая ограничивается лишь максимальным размером строки, поддерживаемым в Windows.
Регистр символов и файловая система Windows
Особенность файловой системы Windows заключается в том, что пользователи и разработчики, имеющие дело с другими операционными системами, могут сталкиваться с проблемами из-за того, что в именах каталогов и путях не учитывается регистр символов. Это значит, что в именах каталогов и файлов сохраняется регистр строк, используемый в момент их создания. Например, вызов метода
создает каталог с именем TeStDiReCtOrY. Если переименовать каталог или файл так, чтобы изменился регистр символов, в имени будет отражен регистр, используемый в момент переименования. Например, следующий код переименовывает файл test.txt в Test.txt:
Тем не менее при сравнении имен каталогов и файлов регистр символов не учитывается. Если выполнить поиск файла с именем "test.txt", API файловой системы .NET будут игнорировать регистр символов при сравнении. Таким образом, при поиске файла "test.txt" будут возвращены совпадения для файлов "Test.txt", "TEST.TXT", "test.TXT", а также любых других их вариантов с различным сочетанием букв в верхнем и нижнем регистре.
I developed an application that depends on a DLL file. When I debug my application, the applicationwould complain that:
"This application has failed to start because xxx.dll was not found."
So I have to copy the DLL file into the same directory as my .vcproj file.
Is there a way to set the project to look for the DLL file in (preferably) some relative path or (not preferred) some absolute path?
Similar concept to how we set include and library path in the project settings.
I mean when I debug my application (hitting F5 ) the above error would pop up.
7 Answers 7
- Go to project properties (Alt+F7)
- Under Debugging, look to the right
- There's an Environment field.
- Add your relative path there (relative to vcproj folder) i.e. ..\some-framework\lib by appending PATH=%PATH%;$(ProjectDir)\some-framework\lib or prepending to the path PATH=C:\some-framework\lib;%PATH%
- Hit F5 (debug) again and it should work.
The Environment field takes NAME=VALUE semicolon-delimited pairs. Append to the PATH variable to have the VS Debugger search additional locations for DLLs: PATH=%PATH%;$(ProjectDir)lib
Alt-F7 brings up a temporary dialog box listing the Active Tool Windows and Active Files (Visual Studio 2017 Community). Is there no way to get to project properties though an old-fashioned menu command? I can't seem to find it.
@SlippD.Thompson Ah, reading your comment again, I think I misunderstood what you meant. Yes, I agree. But at least, there are some hotkeys never changed in Visual Studio, and 'Alt + p, p' is one of them. It was there along with 'Alt + F7', which means now something else as you know. Also, 'Alt + p, p' just means 'Project menu > * Properties'.
Go through project properties -> Reference Paths
Then add folder with DLL's
Please don't post identical answers to multiple questions. Post one good answer, then vote/flag to close the other questions as duplicates. If the question is not a duplicate, tailor your answers to the question.
This doesn't seem to be available in Visual Studio 2015 in a C++ project. Which combination of Visual Studio version and project type supports this option?
The search path that the loader uses when you call LoadLibrary() can be altered by using the SetDllDirectory() function. So you could just call this and add the path to your dependency before you load it.
Another possibility would be to set the Working Directory under the debugging options to be the directory that has that DLL.
Edit: I was going to mention using a batch file to start Visual Studio (and set the PATH variable in the batch file). So then did a bit of searching and see that this exact same question was asked not long ago in this post. The answer suggests the batch file option as well as project settings that apparently may do the job (I did not test it).
In your Project properties(Right click on project, click on property button) ▶ Configuration Properties ▶ Build Events ▶ Post Build Events ▶ Command Line.
Edit and add one instruction to command line. for example copy botan.dll from source path to location where is being executed the program.
I have no idea if it is right to do that, but the IDE gives me that option and it has been useful, I think it's a good option if I want to copy all the necessary files to another folder to distribute your program. Simple spell but effective. Here in this question there are different answers to reach the same end. But I use this option and avoid many headaches.
The other options didn't work for me, only this one, but it seems like the others should be the right way to go.
I had the same problem and my problem had nothing to do with paths. One of my dll-s was written in c++ and it turnes out that if your visual studio doesn't know how to open a dll file it will say that it did not find it. What i did was locate which dll it did not find, than searched for that dll in my directories and opened it in a separate visual studio window. When trying to navigate through Solution explorer of that project, visual studio said that it cannot show what is inside and that i need some extra extensions, so that it can open those files. Surely enough, after installing the recomended extension (in my case something to do with c++) the
"This application has failed to start because xxx.dll was not found."
error miraculously dissapeared.
I agree, but as i wrote before, i just installed what visual studio recomended. It was about 4GB of data and since i did not know what was truly neccesary i just installed all of them and did not look closer into every item.
looks like the DLL had a dependency (i.e. requires another DLL) which was not present or at least not on your PATH until you installed VC++.
Перед написанием кода для внешних компонентов или подключенных служб необходимо включить в проект ссылки на них. По сути, ссылка — это запись в файле проекта, которая содержит сведения, необходимые Visual Studio для поиска компонента или службы.
Чтобы добавить ссылку, в обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости и выберите команду Добавить ссылку. Вы также можете щелкнуть узел проекта правой кнопкой мыши и выбрать пункт Добавить > Ссылка. Дополнительные сведения см. в разделе Практическое руководство. Добавление и удаление ссылок.
Вы можете добавить ссылку на следующие типы компонентов и служб:
Приложения универсальной платформы Windows
другие сборки или библиотеки классов проектов в том же решении;
Ссылки на приложения UWP
Ссылки на проекты
Проекты универсальной платформы Windows (UWP) могут создавать ссылки на другие проекты UWP в решении либо на двоичные файлы или проекты, ориентированные на Windows 8.1, при условии, что эти проекты не используют интерфейсы API, которые являются устаревшими в Windows 10 и более поздних версиях. Более подробную информацию см. в разделе Перенос приложения из среды выполнения Windows 8 в UWP.
Если вы решили изменить целевую платформу проектов Windows 8.1 на Windows 10 или более поздней версии, ознакомьтесь со статьей Перенос, миграция и обновление проектов Visual Studio.
Справочник по пакетам SDK расширений
Если выяснится, что пакет SDK расширений, на который ссылается ваше приложение, не поддерживается, то вы должны выполнить следующие действия.
Посмотреть имя проекта, который вызывает ошибку. Платформа, для которой предназначен этот проект, указывается в скобках рядом с именем проекта. Например, MyProjectName (Windows 8.1) означает, что проект MyProjectName предназначен для платформы Windows 8.1.
Перейдите на сайт поставщика неподдерживаемого пакета SDK расширений и установите версию пакета SDK расширений с зависимостями, совместимыми с версией платформы, для которой предназначен ваш проект.
Если проект предназначен исключительно для Windows 10 и установленный в предыдущем шаге пакет SDK расширений имеет зависимость от пакета среды выполнения Microsoft Visual C++, то совместимой с Windows 10 версией этого пакета является v14.0, которая устанавливается вместе с Visual Studio.
Если установленный на предыдущем шаге пакет SDK расширений имеет зависимости от других пакетов SDK расширений, перейдите на сайты поставщиков, являющихся владельцами зависимостей, и установите версии этих зависимостей, совместимые с версией платформы, для которой предназначен ваш проект.
Перезапустите Visual Studio и откройте ваше приложение.
Щелкните правой кнопкой мыши узел Ссылки или Зависимости в проекте, который вызвал ошибку, и выберите команду Добавить ссылку.
Добавление ссылки во время разработки
При создании ссылки на сборку в проекте Visual Studio ищет сборку в следующих расположениях:
Каталог текущего проекта. (Можно найти эти сборки, используя вкладку Обзор .)
Другие каталоги проектов в одном решении. (Вы можете найти эти сборки на вкладке Проекты .)
- Все проекты содержат неявную ссылку на библиотеку mscorlib.
- Все проекты содержат неявную ссылку на System.Core , даже если System.Core была удалена из списка ссылок.
- Проекты Visual Basic содержат неявную ссылку на Microsoft.VisualBasic.
Ссылки на общие компоненты во время выполнения
По умолчанию для свойства CopyLocal задается значение False , если сборка или компонент находится в глобальном кэше сборок или является компонентом платформы. В противном случае задается значение True. Ссылки проектов на проекты всегда имеют значение True.
Ссылки проектов на проекты
Ссылки проектов на проекты — это ссылки на проекты, которые содержат сборки. Вы добавляете их на вкладке Проекты диалогового окна "Диспетчер ссылок". Visual Studio может найти сборку, если задан путь к проекту.
Ссылки на общий проект
В отличие от большинства других типов проектов, у общего проекта нет двоичных выходных данных. Вместо этого код компилируется в каждый проект, который ссылается на него. Общие проекты позволяют писать общий код, на который ссылается несколько различных проектов приложений. Код компилируется как часть каждого ссылающегося проекта и может включать директивы компилятора, которые помогают внедрить функции конкретной платформы в общую базу кода. Добавьте ссылку на общий проект на вкладке Общие проекты диалогового окна "Диспетчер ссылок".
Ссылки на файлы
Ссылки на файлы — это прямые ссылки на сборки вне контекста проекта Visual Studio. Они создаются на вкладке Обзор диспетчера ссылок. Ссылку на файл следует использовать в случае, если имеется лишь сборка или компонент, но не проект, который создает ее в качестве выходных данных.
Вы можете указать расположение выходных данных проекта для каждой конфигурации (для отладки, выпуска или и того и другого).
Изменение выходного каталога сборки
Чтобы открыть страницы свойств проекта, в обозревателе решений щелкните узел проекта правой кнопкой мыши и выберите пункт Свойства.
В зависимости от типа проекта выберите соответствующую вкладку.
В раскрывающемся списке конфигураций в верхней части окна выберите конфигурацию, расположение файла выходных данных которой нужно изменить (Отладка, Выпуск или Все конфигурации).
На странице найдите запись выходного пути— — она зависит от типа проекта.
Введите путь (абсолютный или относительный для корневого каталога проекта), по которому будут созданы выходные данные, или нажмите кнопку Обзор чтобы перейти к этой папке.
Для некоторых проектов в путь сборки по умолчанию включаются платформа и среда выполнения. Чтобы они не включались, в обозревателе решений щелкните узел проекта правой кнопкой мыши, выберите команду Изменить файл проекта и добавьте следующее:
Если выходные данные не создаются в указанном расположении, убедитесь, что выполняется сборка соответствующей конфигурации (например, Отладка или Выпуск), выбрав ее в строке меню Visual Studio.
Сборка в общий выходной каталог
По умолчанию Visual Studio создает каждый проект в отдельной папки внутри решения. Вы можете изменить пути вывода сборки для проекта, чтобы принудительно поместить все выходные данные в одну папку.
Помещение всех выходных данных решения в общий каталог
Щелкните один проект в решении.
В меню Проект выберите Свойства.
В зависимости от типа проекта откройте вкладку Компиляция или Сборка и задайте в поле Выходной путь папку, которую хотите использовать для всех проектов в решении.
Откройте файл проекта и добавьте следующее объявление свойства в первую группу свойств.
Задание параметру UseCommonOutputDirectory значения true указывает Visual Studio и его обработчику сборки MSBuild, что вы помещаете выходные данные нескольких проектов в одну папку, поэтому MSBuild будет пропускать этап копирования, которое обычно выполняется, если проекты зависят от других проектов.
Повторите шаги 1–4 для всех проектов в решении. Можно пропустить некоторые проекты в качестве исключения, если они не должны использовать общий выходной каталог.
Откройте файл проекта.
Добавьте следующее объявление свойства в первую группу свойств.
Можно использовать как относительный путь к файлу проекта, так и абсолютный. Если вы хотите указать имя проекта в пути, можно сделать ссылку на него с помощью свойств MSBuild $(MSBuildProjectName) и $(MSBuildProjectDirectory) . Другие доступные свойства см. в статье Зарезервированные и стандартные свойства MSBuild.
При сборке Visual Studio по-прежнему будет создавать папку "obj" в папке проекта, но она будет пуста. Ее можно удалить во время сборки. Чтобы сделать это, можно добавить событие после сборки для выполнения следующей команды:
Папка "obj" не будет создаваться при выполнении сборки из командной строки MSBuild.
Приносим извинения. Запрошенное содержимое было удалено. Вы будете автоматически перенаправлены через 1 секунду.
Спрашивающий
Общие обсуждения
Работаю в VS 2008. Язык Visual Basic. В проекте привязал TextBox к закладке в документе Word 2007. Когда указан абсолютный путь к doc, все работает, но проблема с построением и установкой на другом ПК. Выдает ошибку, путь к файлу не
найден. Как указать относительный путь к файлу, физически он находиться в папке bin проекта.
Код:
Dim tНомер As String : tНомер = TextBox2.Text
Dim appWord As Microsoft.Office.Interop.Word.Application 'создаем переменную типа Word.Application
appWord = New Microsoft.Office.Interop.Word.Application 'создаем привязку к программе office word 2007
appWord.Visible = True 'делаем её видимой
Dim docWord As Microsoft.Office.Interop.Word.Document 'загружаем пустой документ word
docWord = appWord.Documents.Open(FileName:="C:\temp\ListBox\ListBox\bin\лапароскопия.doc") 'открываем шаблон с закладками
Dim runRange As Microsoft.Office.Interop.Word.Range 'определяем область
runRange = docWord.Bookmarks.Item("номер").Range 'определяем закладку
runRange.Text = tНомер 'вставляем текст вместо закладки
Все ответы
Относительный береться обычно относительно того файла который запускал ваше приложение, Я так понимаю это Word.
Тогда возбмите путь от папки где находиться Word.exe и следуйте правилу:
..\ - один шаг вверх фолдера
folder_name\ - зайти внутрь фолдера.
Например ваш ехе файл лежит в C:\Program Files\Word\Word.exe
а ваш входной документ - в папке C:\MyData\data.txt
тогда относительный путь который нужно открыть нужно как: ..\..\MyData\data.txt
Don't forget to mark the correct answer Blog
Word подключается в последнюю очередь, после ввода текста в TextBox и нажатия кнопки "Предварительный просмотр". Даже в режиме отладки не работает относительный путь, пробовал разные варианты, в т.ч. Ваши. Привязки exe Word к проекту на ПК нет, в коде я нигде не указываю такой связи. Срабатывает такой вариант: на другой ПК с установленной VS 2008 скопировать сам проект, скорректировать абсолютный путь к файлу и опубликовать проект; тогда все работает, но это извращение. Интересный вариант насчет включения файла как внутренний ресурс, правда еще не знаю как это сделать, работаю недавно.
Вариант: docWord = appWord.Documents.Open(FileName:="лапароскопия.doc") не работает.
Работает Вариант (причем именно "..\лапароскопия.doc", а не "лапароскопия.doc"):
Dim filePath As String : filePath = System.IO.Path.Combine(Environment.CurrentDirectory, "..\лапароскопия.doc")
docWord = appWord.Documents.Open(FileName:=filePath)
но, только в режиме отладки, после публикации файл также не находится.
Вот весь код (на форме ListBox,TextBox,Button1, проект специально максимально упростил):
Imports MO = Microsoft.Office ' импорт пространства имен word
Public Class Form1
Private Sub ListBox_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox.SelectedIndexChanged
TextBox2.Text = ListBox2.Text
ListBox2.Visible = False
End Sub
Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox.Enter
ListBox2.Visible = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tНомер As String : tНомер = TextBox2.Text
Dim filePath As String : filePath = System.IO.Path.Combine(Environment.CurrentDirectory, "..\лапароскопия.doc")
Dim appWord As MO.Interop.Word.Application 'создаем переменную типа Word.Application
appWord = New MO.Interop.Word.Application 'создаем привязку к программе office word
appWord.Visible = True 'делаем её видимой
Dim docWord As MO.Interop.Word.Document 'загружаем пустой документ word
docWord = appWord.Documents.Open(FileName:=filePath) 'открываем шаблон с закладками
Dim runRange As MO.Interop.Word.Range 'определяем область
runRange = docWord.Bookmarks.Item("номер").Range 'определяем закладку
runRange.Text = tНомер 'вставляем текст вместо закладки
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
ListBox2.Visible = False
End Sub
End Class
Читайте также: