Как создать файл для проекта

Обновлено: 06.07.2024

Последовательно двигаемся дальше. Ранее рассказывал, как правильно создать файл проекта и как скопировать в него оси и уровни. Теперь речь про файл-хранилище. Ещё его называют центральным файлом или моделью из хранилища, это синонимы.

Что это и зачем

Файл-хранилище (ФХ) — это файл, подготовленный для одновременной совместной работы нескольких специалистов.

В Виндоуз есть запрет на одновременное сохранение файла разными пользователями. Если в локальной сети лежит файл Ворда, то кто его первый открыл, тот его и может сохранить. Остальные могут открыть файл в режиме «только для чтения», то есть могут смотреть, исправлять, но сохранить в том же месте с тем же именем уже не могут.

Чтобы обойти этот запрет, в Ревите придумали такой способ: работа ведётся не в основном файле проекта, а в его копиях, из которых данные выгружаются в основной файл при синхронизации. В итоге основной файл никто не занимает, а поочерёдно вносит в него изменения. Ниже схема, сейчас объясню, что тут за стрелочки.

На сервере (в локальной сети) лежит файл-хранилище, например проект раздела ВК. Пусть условно путь к нему будет такой:
Сервер\Проекты\Бассейн\ВК\001_Бассейн_ВК.rvt

Утром Марина приходит на работу, пьёт чай, общается с коллегами, и вот уже 10 часов, можно и поработать. Запускает Ревит, указывает путь к файлу ВК в локальной сети и нажимает «Открыть». Когда она это сделает, Ревит сначала скопирует файл-хранилище к ней на компьютер (штрих-пунктирная стрелочка от ФХ к ЛК на схеме), а потом откроет его. И Марина будет работать в этой копии, а не в самом файле-хранилище. Такая копия называется локальная копия (ЛК).

Путь к её локальной копии условно будет таким:

Компьютер Марины\D:\Проекты Ревит\001_Бассейн_ВК_Мариночка

Имя локальной копии создаётся по шаблону: Имя файла-хранилища_Имя пользователя. В данном случае имя пользователя «Мариночка».

В 12 обед, надо идти разогревать контейнер с едой. Перед этим Марина синхронизирует (фиолетовая стрелочка) свою локальную копию с файлом-хранилищем. То есть записывает изменения в файл-хранилище. Таким образом её работа попадёт на сервер и будет видна всем остальным участникам проекта и смежникам.

После обеда Марина продолжает работу, и к проекту подключается Сергей. Он делает всё то же самое, открывает проект с сервера, работает уже в своей локальной копии, а перед уходом синхронизируется. То же делает Марина, теперь вся их работа за день хранится в одном месте на сервере — в файле-хранилище.

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

Чем отличается от файла проекта

От обычного файла в формате RVT файл-хранилище отличается как минимум тремя нюансами:

  1. в файле-хранилище обязательно должны быть рабочие наборы;
  2. есть возможность синхронизации с файлом-хранилищем;
  3. рядом с ФХ и ЛК создаются папки бэкапов, рядом с ФХ ещё и папка Revit_temp.

С обычного файла нельзя снять локальную копию, поработать в ней, а потом записать изменения через синхронизацию. Обычный файл по сути работает как файл Ворда, у которого «кто первый, того и тапки».

Что ещё за рабочие наборы

Это специальный инструмент для разделения элементов модели между участниками проекта. В каком-то роде это нечто похожее на слои, как в Автокаде, только тут добавляется принадлежность элементов модели к определённому человеку.

Например, создаём мы модель ОВ. Одновременно в файле будут работать два человека: отопленец и вентиляционщик. Создаём рабочие наборы (это я покажу ниже): «Отопление» и «Вентиляция». Это как со слоями в Автокаде. Теперь, когда в файле будет работать отопленец, он сделает активным рабочий набор «Отопление», и все элементы, которые он замоделирует, автоматически попадут в рабочий набор «Отопление». Всё ещё напоминает слои, да?

Но есть и важное отличие. Если рабочий набор редактируемый, то все элементы, которые в него входят, принадлежат конкретному пользователю, в данном примере отопленцу. И если вентиляционщик решит втихоря что-то подвинуть у отопленца, то сделать этого не сможет. Трубы принадлежат рабочему набору «Отопление» и редактировать их может только отопленец. И то же самое с рабочим набором «Вентиляция» и элементами в нём: вентиляционщик вертит их, как хочет, а отопленец не может.

Ещё рабочим наборам нельзя задать цвет, как слоям, их можно только скрывать или показывать. Подробнее про рабочие наборы и трюки с ними расскажу в другой статье.

Как создать ФХ

Давайте поэтапно со скриншотами покажу, как превратить обычный файл проекта в файл-хранилище.

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

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

Далее нужно перейти на вкладку «Совместная работа» и там найти одноимённую кнопку. Нажмите на неё.

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

Поток выполнения Java-программы

Выполнение программы Java

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

Что такое файл в Java?

При чтении файла в Java мы должны знать класс файлов Java. Класс Java File представляет файлы и имена каталогов в абстрактной манере. Класс File имеет несколько методов для работы с каталогами и файлами, таких как создание новых каталогов или файлов, удаление и переименование каталогов или файлов и т. д. Объект File представляет фактический файл / каталог на диске.

Теперь давайте разберемся с различными методами создания файла.

Методы для создания файла в Java

1. Создайте файл с классом java.io.File

Вам нужно использовать метод File.createNewFile(). Этот метод возвращает логическое значение:

  • истина, если файл выполнен.
  • false, если файл уже существует или операция по какой-то причине не открывается.

Этот метод также генерирует исключение java.io.IOException, когда он не может создать файл.

Когда мы создаем объект File, передавая имя файла, он может быть с абсолютным путем, или мы можем предоставить только имя файла, или мы можем предоставить относительный путь. Для неабсолютного пути объект File пытается найти файлы в корневом каталоге проекта.

Если мы запустим программу из командной строки, для неабсолютного пути объект File попытается найти файлы из текущего каталога. Экземпляры класса File являются неизменяемыми; то есть, после создания абстрактный путь, представленный объектом File, никогда не изменится.

Теперь давайте рассмотрим небольшой пример и разберемся, как он работает.

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

2. Создайте файл с классом java.io.FileOutputStream

Если вы хотите создать новый файл и в то же время, если хотите записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. В Java FileOutputStream является классом потока байтов. Чтобы записать данные в файл, вы должны преобразовать данные в байты, а затем сохранить их в файл.

Класс FileOutputStream хранит данные в виде отдельных байтов. Может использоваться для создания текстовых файлов. Файл представляет собой хранилище данных на втором носителе, таком как жесткий диск или компакт-диск. Метод FileOutputStream.write() автоматически создает новый файл и записывает в него содержимое.

public static Path createFile(Path path, FileAttribute<?>. attrs) throws IOException

Создает новый и пустой файл, и если файл уже существует, то будет ошибка.

Далее, давайте посмотрим на создание временного файла.

4. Java также может создавать временные файлы

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

Создание временного файла с использованием java.io.File.createTempFile()

с использованием NIO

Для создания временного файла используются следующие два метода.

Вышеуказанный метод принимает четыре аргумента.

Путь -> указать каталог, в котором будет создан файл.

Строка -> чтобы упомянуть префикс имени файла. Используйте ноль, чтобы избежать префикса.

Строка -> чтобы упомянуть суффикс имени файла. т.е. расширение файла. Используйте null, чтобы использовать .tmp в качестве расширения.

attrs -> Это необязательно, чтобы упоминать список атрибутов файла, чтобы установить атомарно при создании файла

По мере того, как программы становятся больше, в целях организации или повторного использования их обычно разделяют на несколько файлов. Одним из преимуществ работы с IDE является то, что они значительно упрощают работу с несколькими файлами. Вы уже знаете, как создавать и компилировать однофайловые проекты. Добавить новые файлы в существующие проекты очень просто.

Лучшая практика

Когда вы добавляете в проект новые файлы исходного кода, давайте им расширение .cpp .

Для пользователей Visual Studio

В Visual Studio кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Создать элемент… (New Item…).

Рисунок 1 Добавление нового файла в проект в Visual Studio

Рисунок 1 – Добавление нового файла в проект в Visual Studio

Убедитесь, что у вас выбран Файл C++ (.cpp). Дайте новому файлу имя, и он будет добавлен в ваш проект.

Рисунок 2 Создание нового файла в проекте в Visual Studio

Рисунок 2 – Создание нового файла в проекте в Visual Studio

Примечание. Если вы создаете новый файл из меню Файл (File), а не из своего проекта в обозревателе решений, новый файл не будет добавлен в ваш проект автоматически. Вам придется добавить его в проект вручную. Для этого кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Существующий элемент (Existing Item), а затем выберите свой файл.

Теперь, когда вы компилируете свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла при компиляции.

Для пользователей Code::Blocks

В Code::Blocks перейдите в меню File (Файл) и выберите New (Создать) → File… (Файл…).

Рисунок 3 Создание нового файла в Code::Blocks

Рисунок 3 – Создание нового файла в Code::Blocks

В диалоговом окне New from template (Создать из шаблона) выберите C/C++ source (Исходный файл C/C++) и нажмите Go (Перейти).

Рисунок 4 Создание нового исходного файла C/C++ в Code::Blocks

Рисунок 4 – Создание нового исходного файла C/C++ в Code::Blocks

На этом этапе вы можете увидеть или не увидеть приветствие в диалоговом окне мастера создания исходного файла C/C++. Если да, щелкните Next (Далее).

Рисунок 5 Диалоговое окно мастера создания исходного файла C/C++

Рисунок 5 – Диалоговое окно мастера создания исходного файла C/C++

На следующей странице мастера выберите C++ и нажмите Next (Далее).

Рисунок 6 Выбор языка при создании нового исходного файла в Code::Blocks

Рисунок 6 – Выбор языка при создании нового исходного файла в Code::Blocks

Теперь дайте новому файлу имя (не забудьте расширение .cpp ) и выберите все конфигурации сборки. Наконец, выберите Finish (Готово).

Рисунок 7 Указание имени файла и выбор конфигураций сборки

Рисунок 7 – Указание имени файла и выбор конфигураций сборки

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

Для пользователей GCC/G++

Из командной строки вы можете создать дополнительный файл самостоятельно, используя свой любимый редактор, и дать ему имя. Когда вы компилируете свою программу, вам нужно будет включить в строку компиляции все соответствующие исходные файлы. Например:

где main.cpp и add.cpp – это имена ваших исходных файлов, а main – имя выходного файла.

Пример с несколькими файлами

В уроке «2.6 – Предварительные объявления и определения» мы рассмотрели программу с одним исходным файлом, которая не компилируется:

Когда компилятор достигает вызова функции add в строке 5 в функции main , он не знает, что такое add , потому что мы определили add только в строке 9! Нашим решением было либо переупорядочить функции (поместив сначала add ), либо использовать для add предварительное объявление.

Теперь посмотрим на аналогичную программу из нескольких исходных файлов:

Ваш компилятор может решить сначала скомпилировать либо add.cpp , либо main.cpp . В любом случае main.cpp не скомпилируется, что приведет к той же ошибке компилятора, что и в предыдущем примере:

Причина точно такая же: когда компилятор достигает строки 5 файла main.cpp , он не знает, что такое идентификатор add .

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

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

Наши варианты решения здесь такие же, как и раньше: поместить определение функции add перед функцией main или удовлетворить компилятор предварительным объявлением. В этом случае, поскольку функция add находится в другом файле, вариант изменения порядка определений не подходит.

Лучшее решение здесь – использовать предварительное объявление:

main.cpp (с предварительным объявлением):

add.cpp (остается прежним):

Теперь, когда компилятор компилирует main.cpp , он будет знать, что такое идентификатор add , и будет удовлетворен. Линкер соединит вызов функции add в main.cpp с определением функции add в add.cpp .

Используя этот метод, мы можем предоставить файлам доступ к функциям, которые находятся в другом файле.

Попробуйте скомпилировать add.cpp и main.cpp с предварительным объявлением. Если вы получили ошибку линкера, убедитесь, что вы правильно добавили add.cpp в свой проект или строку компиляции.

Что-то пошло не так!

Есть много вещей, которые могут пойти не так, когда вы в первый раз попытаетесь работать с несколькими файлами. Если вы попробовали приведенный выше пример и столкнулись с ошибкой, проверьте следующее:

1. Если вы получаете ошибку компилятора о том, что add не определена в main , вы, вероятно, забыли предварительное объявление для функции add в main.cpp .

2а. … наиболее вероятная причина в том, что add.cpp неправильно добавлен в ваш проект. При компиляции вы должны увидеть в списке компиляции и main.cpp , и add.cpp . Если вы видите только main.cpp , значит add.cpp определенно не компилируется. Если вы используете Visual Studio или Code::Blocks, вы должны увидеть add.cpp в списке в обозревателе решений / на панели проекта в левой части IDE. Если его не видно, кликните на проекте правой кнопкой мыши и добавьте этот файл, а затем попробуйте скомпилировать снова. Если вы компилируете из командной строки, не забудьте включить main.cpp и add.cpp в свою команду компиляции.

2b. … возможно, вы добавили add.cpp не в тот проект.

2c. … возможно, что файл не компилируется или не линкуется. Проверьте свойства файла и убедитесь, что файл настроен для компиляции/линковки. В Code::Blocks компиляция и линковка – это отдельные флажки, которые следует установить. В Visual Studio есть параметр «исключить из сборки» (exclude from build), для которого следует установить значение «нет» или оставить пустым.

Резюме

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

Мы будем много работать с несколькими файлами, как только перейдем к объектно-ориентированному программированию, поэтому сейчас самое подходящее время, чтобы убедиться, что вы понимаете, как добавлять и компилировать проекты с несколькими файлами.

Напоминание: всякий раз, когда вы создаете новый исходный файл (.cpp), вам нужно будет добавить его в свой проект, чтобы он компилировался.

Чтобы связать воедино файлы содержания и разделов, необходимо создать файл проекта:

1. Если Help Workshop не был открыт, запустите его.

2. Создайте новый файл проекта командой File > New. Выберите строку Help Project и нажмите кнопку ОК.

3. Когда Help Workshop предложит задать имя проекта, введите строку Skill13 и нажмите кнопку Save. Примерный вид окна Help Workshop показан на рис. 13.5.


Рис. 13.5. Новый файл проекта

4. Откройте диалоговое окно Options с помощью одноименной кнопки.

5. В диалоговом окне Open введите строку Создание справочного файла в поле Help Title.

6. Перейдите на вкладку Compression. Установите переключатель Custom, а затем -флажок Hall Compression.

7. Перейдите на вкладку Files и введите в поле Help File строку Skill13. hlp.

10. Если файл Skill13.rtf присутствует в списке Topic Files, закройте диалоговое окно кнопкой ОК.

12. Закройте диалоговое окно Options кнопкой ОК.

Обратите внимание на то, что некоторые вкладки диалогового окна Options нами не использовались (рис. 13.6). Более подробную информацию о параметрах, расположенных на этих вкладках, можно получить в справочной системе Help Workshop.


Рис. 13.6. Диалоговое окно Options

14. Чтобы увидеть свойства окна, необходимо создать само окно. В диалоговом окне Add New Window Type введите строку Main в поле Create a Window Named. Выберите из списка Based on this Standard Window строку Procedure. Когда настройка параметров будет завершена, нажмите кнопку ОК.

Когда окно будет создано, диалоговое окно Windows Properties принимает вид, изображенный на рис. 13.7.


Рис. 13.7. Диалоговое окно Window Properties

16. Закройте диалоговое окно Window Properties кнопкой ОК. Справочный проект должен выглядеть так, как показано на рис. 13.8.


Рис. 13.8. Файл проекта

18. Для каждого из разделов, перечисленных ниже, нажмите кнопку Add и введите соответствующий идентификатор в поле Topic ID, а также идентификатор контекста в поле Mapped Numeric Value.

Идентификатор раздела Идентификатор контекста
IDH_CreateContentsFile
IDH_AddHeadings
IDH_AddTopics
IDH_WriteTopics
IDH_AddFootnotes
IDH_SaveRTF
IDH_CreateProjectFile
IDH_SetOptions
IDH_AddFiles
IDH_DefineWindow
IDH_Compile
IDH_Test

19. После ввода всех значений закройте диалоговое окно кнопкой ОК.


Рис. 13.9. Результаты компиляции для файла проекта

Справочный файл следует немедленно протестировать, чтобы убедиться, что он работает нормально. Для этого выполните следующие действия:

2. Когда на экране появится диалоговое окно View Help File, в нем должно быть заранее указано имя файла Skill13.hlp. Если его там нет, нажмите кнопку Browse и выберите файл Skill13.hip. После того как файл будет выделен, нажмите кнопку View Help.

3. На вкладке Contents попробуйте развернуть заголовки — вы увидите, как выглядит ваш справочный файл. Щелкайте на отдельных разделах, чтобы просмотреть их.

Вот и все, что требуется сделать для создания простейшего справочного файла. Теперь у вас есть краткое изложение этого урока, оформленное в виде справочного файла. Откройте его, если вам потребуется создать текстовый файл в будущем. Любители острых ощущений могут дополнить файл разделов и внести в него сведения о ссылках и работе с графикой. Если бы я попытался рассмотреть все возможности и приемы, используемые при создании сложных справочных файлов, пришлось бы писать отдельную книгу. Дальше вам придется действовать самостоятельно.




ПОДСКАЗКАОбязательно просмотрите электронную документацию по Help Workshop — в нее включены подробные инструкции по реализации других возможностей справочной системы Windows.

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