Как ссылаться на файл в c

Обновлено: 04.07.2024

Я использую StreamReader для динамической замены содержимого в шаблоне HTML. HTML-файл был импортирован в мой проект.

Прямо сейчас мне приходится ссылаться на HTML-файл в статическом месте на моем устройстве dev, потому что я не могу найти правильный синтаксис для ссылки на него после его импорта в мой проект VS.

Как мне обратиться к файлу без использования абсолютного пути?

Текущая реализация для справки:

4 ответа

Я нашел два решения для этого:

Если вам все равно, виден ли внешний файл в каталоге сборки / installdir вашего приложения:

Если вы хотите, чтобы ваш внешний файл был невидимым после компиляции:

Обратите внимание, что второе решение требует добавления внешнего файла и изменения действия сборки на «Встроенный ресурс» в меню свойств этого файла в Visual Studio.

Вы можете добавить его как встроенный ресурс и извлечь его таким образом.

За ваш комментарий

Есть два основных способа сделать это. В настольном приложении текущий каталог .exe устанавливается в каталог, из которого он запускается по умолчанию. Если это не изменилось путем запуска .exe с помощью ярлыка со специальными настройками или с помощью другого процесса, использующего специальную функцию, это должно быть значение по умолчанию. Если это так, вы можете просто использовать относительный путь. Например, если у вас есть файл с именем «data.txt» в папке с именем «вещи» внутри папки с именем «вещи» в том же каталоге, что и ваше приложение, вы можете просто указать относительный путь «вещи / вещи / данные». txt "напрямую, и Windows решит это за вас.

Если по какой-то причине вам нужно подняться «вверх» из каталога приложения, вы можете использовать «..» для представления этой родительской папки каталога. Поэтому «../data.txt» будет искать в папке, в которой содержится , текущий каталог для файла с именем «data.txt».

Вы также можете изменить текущий каталог приложения, когда он станет каталогом .exe, и затем ссылаться на все по относительному пути, как в первом примере.

Одна распространенная вещь, которую я видел, - это поместить местоположение файла в файл конфигурации. Это позволяет изменить местоположение файла по желанию без перекомпиляции.

До этого момента мы успели рассмотреть 2 основных типа переменных:

обычные переменные, которые хранят значения напрямую;

указатели, которые хранят адрес другого значения (или null), для доступа к которым выполняется операция разыменования указателя.

Ссылки

Ссылки на неконстантные значения (обычно их называют просто «ссылки» или «неконстантные ссылки»), которые мы обсудим на этом уроке.

Ссылки на константные значения (обычно их называют «константные ссылки»), которые мы обсудим на следующем уроке.

В C++11 добавлены ссылки r-value, о которых мы поговорим чуть позже.

Ссылка (на неконстантное значение) объявляется с использованием амперсанда ( & ) между типом данных и именем ссылки:

В этом контексте амперсанд не означает «оператор адреса», он означает «ссылка на».

Ссылки в качестве псевдонимов

Ссылки обычно ведут себя идентично значениям, на которые они ссылаются. В этом смысле ссылка работает как псевдоним объекта, на который она ссылается, например:

Результат выполнения программы:

В примере, приведенном выше, объекты ref и value обрабатываются как одно целое. Использование оператора адреса с ссылкой приведет к возврату адреса значения, на которое ссылается ссылка:

Краткий обзор l-value и r-value

Инициализация ссылок

Ссылки должны быть инициализированы при создании:

int & ref = value ; // корректная ссылка: инициализирована переменной value int & invalidRef ; // некорректная ссылка: ссылка должна ссылаться на что-либо

В отличие от указателей, которые могут содержать нулевое значение, ссылки нулевыми быть не могут.

Ссылки на неконстантные значения могут быть инициализированы только неконстантными l-values. Они не могут быть инициализированы константными l-values или r-values:

Обратите внимание, во втором случае вы не можете инициализировать неконстантную ссылку константным объектом. В противном случае, вы бы могли изменить значение константного объекта через ссылку, что уже является нарушением понятия «константа».

После инициализации изменить объект, на который указывает ссылка — нельзя. Рассмотрим следующий фрагмент кода:

int & ref = value1 ; // ок: ref - теперь псевдоним для value1 ref = value2 ; // присваиваем 8 (значение переменной value2) переменной value1. Здесь НЕ изменяется объект, на который ссылается ссылка!

Обратите внимание, во втором стейтменте ( ref = value2; ) выполняется не то, что вы могли бы ожидать! Вместо переприсваивания ref (ссылаться на переменную value2 ), значение из value2 присваивается переменной value1 (на которое и ссылается ref ).

Ссылки в качестве параметров в функциях

Ссылки чаще всего используются в качестве параметров в функциях. В этом контексте ссылка-параметр работает как псевдоним аргумента, а сам аргумент не копируется при передаче в параметр. Это в свою очередь улучшает производительность, если аргумент слишком большой или затратный для копирования.

На уроке №82 мы говорили о том, что передача аргумента-указателя в функцию позволяет функции при разыменовании этого указателя напрямую изменять значение аргумента.

// ref - это ссылка на переданный аргумент, а не копия аргумента changeN ( x ) ; // обратите внимание, этот аргумент не обязательно должен быть ссылкой

Результат выполнения программы:

Когда аргумент x передается в функцию, то параметр функции ref становится ссылкой на аргумент x . Это позволяет функции изменять значение x непосредственно через ref ! Обратите внимание, переменная x не обязательно должна быть ссылкой.

Совет: Передавайте аргументы в функцию через неконстантные ссылки-параметры, если они должны быть изменены функцией в дальнейшем.

Основным недостатком использования неконстантных ссылок в качестве параметров в функциях является то, что аргумент должен быть неконстантным l-value (т.е. константой или литералом он быть не может). Мы поговорим об этом подробнее (и о том, как это обойти) на следующем уроке.

Ссылки как более легкий способ доступа к данным

Второе (гораздо менее используемое) применение ссылок заключается в более легком способе доступа к вложенным данным. Рассмотрим следующую структуру:

Предположим, что нам нужно работать с полем value1 структуры Something переменной other структуры Other (звучит сложно, но такое также встречается на практике). Обычно, доступ к этому полю осуществлялся бы через other.something.value1 . А что, если нам нужно неоднократно получать доступ к этому члену? В этом случае код становится громоздким и беспорядочным. Ссылки же предоставляют более легкий способ доступа к данным:

// ref теперь может использоваться вместо other.something.value1

Таким образом, следующие два стейтмента идентичны:

Ссылки позволяют сделать ваш код более чистым и понятным.

Ссылки vs. Указатели

*ptr и ref обрабатываются одинаково. Т.е. это одно и то же:

Поскольку ссылки должны быть инициализированы корректными объектами (они не могут быть нулевыми) и не могут быть изменены позже, то они, как правило, безопаснее указателей (так как риск разыменования нулевого указателя отпадает). Однако они немного ограничены в функциональности по сравнению с указателями.

Если определенное задание может быть решено с помощью как ссылок, так и указателей, то лучше использовать ссылки. Указатели следует использовать только в тех ситуациях, когда ссылки являются недостаточно эффективными (например, при динамическом выделении памяти).

Заключение

Ссылки позволяют определять псевдонимы для других объектов или значений. Ссылки на неконстантные значения могут быть инициализированы только неконстантными l-values. Они не могут быть переприсвоены после инициализации. Ссылки чаще всего используются в качестве параметров в функциях, когда мы хотим изменить значение аргумента или хотим избежать его затратного копирования.

Я пытаюсь заставить парсер yaml-cpp работать на моем компьютере. Я следовал инструкциям на README, который сгенерировал файл libyaml-cpp.a без ошибок или предупреждений. Затем я скопировал этот файл в каталог, назовем его /path/to/files , где я также поместил b.yaml и main.cpp , который содержит следующий текст:

Это происходит из первой строки учебника yaml-cpp . Я попытался скомпилировать это, связавшись с библиотекой yaml-cpp несколькими различными способами, все из которых привели к одной и той же ошибке времени компиляции: use of undeclared identifier 'YAML' . Вот некоторые из вещей, которые я пробовал:

  1. g++ main.cpp -lyaml-cpp -L/path/to/files
  2. g++ main.cpp libyaml-cpp.a
  3. g++ main.cpp libyaml-cpp.a -lyaml-cpp -L/path/to/files

и так далее. Как мне правильно скомпилировать это или более правильно отладить этот процесс?

Теперь мой файл main.cpp выглядит так:

/Users/benlindsay/scratch/yaml-cpp/include содержит каталог yaml-cpp , который, в свою очередь, содержит все файлы .h , включая yaml.h . /Users/benlindsay/scratch/yaml-cpp/build содержит файл lyaml-cpp.a .

1 ответ

У меня есть это изображение кнопки: Мне было интересно, можно ли сделать простой <a href=>some words</a> и стилизовать эту ссылку так, чтобы она выглядела как эта кнопка? Если это возможно, как мне это сделать?

Хорошо, я скачал yaml-cpp и попробовал, вот рабочая версия

Компиляция с использованием g++ -std=c++11 main.cpp -lyaml-cpp -I/Users/benlindsay/scratch/yaml-cpp/include -L/Users/benlindsay/scratch/yaml-cpp/build

Похожие вопросы:

Я создаю файл PDF на странице Sharepoint; поскольку до сих пор я не мог позволить пользователю выбрать место посадки для файла pdf (как об этом спрашивали здесь ), я решил создать ссылку на файл на.

У меня есть изображение, которое содержит ссылку на файл. Когда вы нажмете на него, начнется загрузка этого файла,и вы увидите его ссылку в программном обеспечении менеджера загрузок или т. д. Это.

Я хотел бы сократить это выражение следующим образом this.GdkWindow.GetPosition(ConfigurationService.ApplicationSettings.rect1.X, ConfigurationService.ApplicationSettings.rect1.Y); к чему-то вроде.

У меня есть это изображение кнопки: Мне было интересно, можно ли сделать простой <a href=>some words</a> и стилизовать эту ссылку так, чтобы она выглядела как эта кнопка? Если это.

Цель состоит в том, чтобы загрузить файл dumped backup.sql после запуска сценария dumping sql (из PHP). Обычно сброшенный файл .sql выводится (записывается) на сервер. Затем, когда я делаю ссылку.

У меня есть страница JSP, и я хотел бы отобразить ссылку, которая позволяет пользователю загрузить файл. Этот файл присутствует на сервере tomcat, скажем, в этом каталоге : C:\myDirectory\myFile Как.

Я хочу знать, как сделать ссылку на самые маленькие элементы внутри серии списков, которые я разделил следующим образом: data(map(keyword :counter)querieddata) sortedlist(sort > tosort) part(into.

Спасибо за любую помощь.

вы можете добавить ресурсы.resx файл файл в ваш проект и добавить ресурсы, такие как изображения, строки, файлы к нему. Затем вы можете ссылаться на эти ресурсы через автоматически генерируемые Resources класса. По умолчанию Visual Studio создает ресурсы.resx файл на свойства

встроить в ресурсы.resx файл

Resources.resx должен был быть создан при создании проекта WinForms. Вы можете просмотреть его в Properties на Solution Explorer .

enter image description here

двойной клик Resources.resx , чтобы открыть конструктор. Вы можете скопировать из Windows Explorer и вставьте в конструктор ресурсов VS. Этот инструмент достаточно умен, чтобы выяснить, какой тип ресурса, и на снимке экрана ниже показано, что аналогичные типы ресурсов сгруппированы вместе в раскрывающемся списке строки меню.

enter image description here

С этого момента вы можете следовать принятому ответу и вручную назначить ресурс свойству элемента управления.

этого.Раздел Backgroundimage = "Свойства".Ресурсы.MyImage;

вставить в форму через designer

используя конструктор, вы можете встроить ресурс в форма .resx . Выберите элемент управления в конструкторе и откройте

вы всегда можете сделать это таким образом.

перейти к проекту-->свойства проекта (всегда имя проекта + свойства)-->ресурсы

в верхней строке меню вы найдете поле со списком, где вы выберете, какой тип элемента вы хотите использовать в качестве ресурса.

пример: Если вам нужно изменить значок для формы(тот, который появляется в верхней левой части формы), вы затем загрузите ".файл ICO". Если вам нужно вставить изображение кнопки, вы должны загрузить ".PNG-файл. Вы можете видеть это Resx файлы учебник youtube видео, где это объясняется отлично

после этого вы выбираете элемент управления, в который хотите вставить изображение, и переходите к свойствам-->Image и выберите изображение, которое вы только что добавили из файла ресурсов проекта.

Ниже приведен код для извлечения изображения из папки ресурсов. Обычно мы храним изображения в папке Resources. но иногда у нас есть только имя образа. в этом случае вы можете получить доступ к изображениям из папки ресурсов, используя только имя изображения.

Читайте также: