C builder получить расширение файла

Обновлено: 06.07.2024

Репутация: нет
Всего: нет

из OpenDialog->FileName можно получить имя файла с расширением, а можно ли получить имя файла без расширения?
и еще один момент, мы получаем имя файла в формате AnsiString, можно ли его как то сделать типа string ?

Репутация: 1
Всего: 1

ну блин. обрежь 4 последних символа.
ну . ищи с конца точку,потом обрезай.
из стандартного ничего не припомню. хотя может даже что-то и есть типа ExtractFileNameWithoutExt(AnsiString *str)
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги

Репутация: 5
Всего: 9

О майн готт.
Читаем справку по:
ExtractFileName

Репутация: 1
Всего: 1

"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги

Репутация: 1
Всего: 1

"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги

Репутация: 5
Всего: 9


Может достаточно использовать метод AnsiString .c_str() ?

Репутация: 4
Всего: 15

Репутация: 1
Всего: 1

"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги

Репутация: 5
Всего: 9

.
return ExtractFileName(ChangeFileExt(fullpath, EmptyStr));
.

Вот мой вариант:

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

[ Время генерации скрипта: 0.1263 ] [ Использовано запросов: 21 ] [ GZIP включён ]

2.Как мне создать файловую ассоциацию? Ассоциировать мою программу с определенными файлами и поменять у них иконки. И как убрать эту асоциацию(откатиться назад) без геморройных последствий ввиде невнятных значков файлов и т.п.





Блин у меня есть огромная кгига Архангельского Программирование в Builder 6(1150 страниц), но там такого не нашел.
P.S Если книга не тяжелая(всмысле объема), то я её скачаю.

Добавлено 23.05.08, 17:54
Мдяяяяя 992 стр. если моя книжка весит 126 мегов, а эта наверное метров 110 как минимум. Для меня скачать это нереально в ближайшее время(верне реально,но долго и модем в телефоне жалко).

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



А идеале откопал у себя диск с примерами, прилагаю исходники.Если каких то файлов хватать не будет, пиши, я поищу их, потому что в одной папке на диске находится по несколько примеров.

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

Так как сам этого никогда не делал, конкретным кодом помочь не могу, но есть книга по этой теме электронная, сам не читал но очень рекомендовали

Добавлено 23.05.08, 18:13
Создание эффективных WIN32-приложений с учётом специфики 64-разрядной версии Windows - 4,5 мб



Так как сам этого никогда не делал, конкретным кодом помочь не могу, но есть книга по этой теме электронная, сам не читал но очень рекомендовали

Добавлено 23.05.08, 18:15

Вот только не знаю выложена ли в инете, у меня она в печатном виде. Ну я думаю что можно найти(если поискать), если найду то попробую скачать(не боги горшки обжигают ). Создание эффективных WIN32-приложений с учётом специфики 64-разрядной версии Windows - 4,5 мб





Вот назрел ещё один вопросик:
Вот этот код из примера AntiAspirant-а регистрирует собственное расширение файла и у этого файла ставится иконка программы. Так вот как поменять иконку не меняя иконки у программы. т.е. брать иконки из других источников например ImaheList или ресурса?

Ди и чегото непонятно мне что такое ParamStr(0) или ParamStr(1). Может кто-нибуть подробно разъяснить этот код(если несложно, т.к. я никого не принуждаю )?

Наталия Елманова, Центр Информационных Технологий

Структура файла проекта

Для каждого приложения C++ Builder создается один файл проекта, один make-файл и один файл ресурсов. Файл проекта генерируется при выборе пункта меню File/New Application. Первоначально файлу проекта присваивается по умолчанию имя Project1.cpp. Если в процессе разработки приложения добавляются формы и модули, C++ Builder обновляет файл проекта.

Для просмотра файла проекта следует выбрать пункт меню View/Project Source. Эта операция выполнит загрузку исходного текста файла проекта в редактор кода (рис. 1).

Рис. 1. Просмотр файла проекта в редакторе кода

Файл проекта имеет такую же структуру, как и файл модуля. Подобно файлу модуля, это файл исходного кода на языке C++, который компилируется с другими файлами при создании исполняемого файла.

Структура make-файла

Make-файл — это текстовый файл, содержащий макросы, директивы и инструкции по компиляции и сборке проекта для утилиты make.exe. Отметим, что make-файл по существу ничем не отличается от обычного знакомого пользователям С и С++ make-файла. Он генерируется автоматически при создании проекта, и его содержимое зависит от установок, указанных программистом в опциях проекта. Чтобы увидеть содержание make-файла, следует выбрать пункт меню View/Project Makefile (рис. 2).

Рис. 2. Пример структуры make-файла

Структура модуля

Модули являются основой создания библиотек и приложений в C++ Builder. Модуль содержит исходный текст на языке C++ и первоначально представляет собой файл с расширением *.CPP. В дальнейшем каждый такой файл компилируется в объектный файл с расширением *.OBJ. Объектные файлы, в свою очередь, собираются компоновщиком в выполняемый файл с расширением *.EXE.

  • Имя должно быть уникальным. Два модуля с одним и тем же именем не могут использоваться одновременно в одном и том же проекте.
  • Если модуль связан с формой, то имя исходного файла модуля и файла формы (с расширением *.dfm) должны быть одинаковыми. При создании обработчика событий в инспекторе объектов в тексте файла модуля генерируется шаблон функции, в который разработчик должен вводить код, выполняемый при наступлении обрабатываемого события.

Структура h-файла

h-файл генерируется при создании нового модуля. В нем содержится информация о данных и функциях, которые можно использовать в модуле. h-файл для модуля, связанного с формой, содержит описания интерфейсных элементов и других компонентов этой формы и обработчиков событий для них (то есть, в терминологии объектно-ориентированного программирования, описание класса формы). Такие описания автоматически добавляются в h-файл при внесении в форму новых компонентов или генерации новых обработчиков событий. Иными словами, в h-файле содержится интерфейс, а в самом модуле — реализация.

Рис. 3. Пример структуры h-файла

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

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

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

Файл формы

Форма является одним из важнейших элементов приложения C++ Builder. Процесс редактирования формы происходит при добавлении к форме компонентов, изменении их свойств, создании обработчиков событий.

Рис. 4. Структура файла формы

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

Файл модуля (.cpp) — cодержит исходный код, связанный с формой.

h-файл(.h) — cодержит описание класса формы, то есть описания содержащихся на форме компонентов и обработчиков событий.

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

Хотя в C++ Builder файл .dfm сохраняется в двоичном формате, его содержание можно просмотреть с помощью редактора кода. Для этого нужно нажать правую клавишу мыши над формой и из контекстного меню формы выбрать пункт View as Text.

Отметим, что при изъятии какого-либо компонента с формы в буфер обмена в последнем реально оказывается часть тестового представления файла формы, содержащая описание данного компонента. В этом можно убедиться, выполнив затем операцию вставки из буфера обмена в любом текстовом редакторе. Модули Delphi 2.0

C++ Builder создан на основе визуальной библиотеки компонентов Borland Delphi, ставшей за последние два года весьма популярной среди разработчиков. По этой причине этот продукт имеет общую с Delphi библиотеку классов, часть из которых осталась написанной на Object Pascal. Из этого следует, что в приложениях можно использовать компоненты, созданные для Delphi 2.0.

Однако совместимость с Delphi этим не исчерпывается. В проектах C++ Builder можно использовать не только библиотеку компонентов Delphi, но и код, написанный на Object Pascal, а также формы и модули Delphi. Эти возможности появились благодаря включению в С++ Builder обоих компиляторов -- С++ и Object Pascal.

Рис. 5. Типы файлов, используемые в проектах С++ Builder

В соответствии с этим в качестве частей проекта могут быть использованы модули, написанные на Object Pascal. В этом можно убедиться, взяв формы какого-нибудь из примеров, созданных в Delphi 2.0 и включив их в проект С++ Builder. Возьмем в качестве такого примера приложение Graphex из набора примеров Delphi 2.0. Создадим новый проект, удалим из него созданную по умолчанию форму и добавим два модуля из приложения Graphex — Graphwin.pas и Bmpdlg.pas.

Рис. 6. Добавление модулей Delphi к проекту.

Скомпилируем проект. Можно убедиться в работоспособности полученного приложения, запустив и протестировав его.

В случае использования форм Delphi к проекту добавляются два файла — файл формы с расширением *.dfm и файл модуля с расширением *.pas. Описание класса формы содержится в самом модуле, следовательно, для этого не требуется отдельный файл заголовка.

Рассмотрим более подробно структуру модуля Delphi. В качестве простейшего примера приведем структуру модуля, связанного с формой, содержащей единственный интерфейсный элемент — кнопку закрытия окна: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private < Private declarations >public < Public declarations >end; var Form1: TForm1; implementation procedure TForm1.Button1Click(Sender: TObject); begin close; end; end.

  • Заголовок модуля — предназначен для идентификации модуля и должен быть уникальным для данного проекта. Совпадает с именем файла с расширением *.pas.
  • Секция интерфейса (начинается зарезервированным словом interface). Секция интерфейса является местом, где объявляются константы, типы, переменные, процедуры * и функции, которые доступны для использования другими программными модулями. При объявлении процедур и функций в секции интерфейса необходимыми являются только их заголовки. Тела, или реализации, этих процедур и функций располагаются в секции реализации.
  • Секция реализации (начинается зарезервированным словом implementation) содержит процедуры и функции, включая обработчики событий. Объявления обработчиков событий должны присутствовать в секции интерфейса. Помимо этого, секция реализации может иметь дополнительные процедуры, функции и объявления констант, типов и переменных, упоминания о которых нет в секции интерфейса, но эти объявления видимы только в пределах данного модуля.
  • Секции инициализации и завершения (начинаются с зарезервированных слов initialization и finalization) — необязательные секции для размещения операторов, выполняемых соответственно при запуске и завершении приложения. Предложение uses (необязательное) содержит имена других модулей, используемых данным модулем и может располагаться непосредственно за ключевым словом interface и за ключевым словом implementation. Предложение uses делает секцию интерфейса других модулей доступной в данном модуле.

Отметим, однако, что для создания новых модулей Delphi требуется наличие Delphi. В С++ Builder их можно только использовать. Возможности редактирования форм и модулей Delphi в С++ Builder существенно ограничены — допустимы только операции, не затрагивающие секцию интерфейса модуля. Например, возможно перемещение интерфейсных элементов в пределах содержащих их компонентов-контейнеров, изменение размеров, копирование в буфер обмена, но запрещено их добавление или удаление. Возможны изменения внутри кода процедур и функций, но запрещено добавление новых обработчиков событий.

* В терминологии Pascal процедурами обычно называют функции, не возвращающие значений (в частности, обработчики событий). Елманова Н.З., Кошель С.П. Введение в Borland С++ Builder


Поместить на форму следующие компоненты, расположенные на закладках Win3.1 и Standard:

DriveComboBox с помощью него создаётся выпадающий список в котором отображаются названия всех носителей присутствующих в системе. С помощью него мы будем осуществлять переход от одного диска к другому;

DirectoryListBox с помощью него будет отображаться дерево каталогов выбранного диска;

FileListBox с помощью него отображается список файлов выбранной директории;

Edit1 (для отображения пути к выбранному файлу) и Edit2 (для отображения результата);

Lable1, Lable2, Lable3, Lable4, Lable6, Lable7 (для отображения комментариев);

Button1, Button2, Button3, Button4;

Настроить свойства используемых компонентов

Выделить компонент DriveComboBox и открыть закладку Properties инспектора объектов. Открыть список в свойстве DirList и выбрать в нём компонент DirectoryList1, теперь в нём будут отображаться каталоги с выбранного диска;

Выделить компонент DirectoryListBox щёлкнув по нему левой кнопкой мыши и в свойстве FileList выбрать компонент FileListBox1 из выпадающего списка;

Изменить свойства Caption в элементе Lable1соответственно на «Выбрать диск»;

Изменить свойства Caption в элементе Lable2 соответственно на «Выбрать директорий»;

Изменить свойства Caption в элементе Lable3 соответственно на «Выбрать файл»;

Изменить свойства Caption в элементе Lable4 соответственно на «Нажать на кнопку «Установить»;

Изменить свойства Caption в элементе Lable5 соответственно на «Полученный путь к файлу»;

Изменить свойства Caption в элементе Lable6 соответственно на «Открыть файл»;

Изменить свойства Caption в элементе Lable7 соответственно на «Результат»;

Изменить свойства Caption в элементах Button1, Button2, Button3 и Button4 на «Установить», «Открыть», «Результат» и «Выход» соответственно;

Убрать в свойстве Text элементов Edit1 и Edit2 содержимое.

Приступить к обработке событий.

Начать с нажатия кнопки «Установить» на форме Form1. Прежде всего активизировать кнопку, с которой будем работать. Затем перейти в инспектор объектов и активизировать страницу событий (Events). На ней можно обнаружить список всех возможных событий для активного компонента (в данном случае кнопки). Нас интересует событие OnClick, возникающее при нажатии кнопки. Чтобы определить обработчик этого события, необходимо сделать двойной щелчок мыши в поле значения. Появится окно редактора кода с заготовкой для нашего обработчика, в котором необходимо написать код
Edit1->Text=FileListBox1->FileName;

Написать следующий код для обработки события при нажатии на кнопку «Открыть»:

if((F=fopen(Edit1->Text.c_str(),"rt"))==NULL) // проверка открытия файла

ShowMessage ("Файл не удаётся открыть");

else ShowMessage ("Файл открыт");

// Чтение информации из файла

// Оператор чтения целой переменной из файла

// и помещение ёё в соответствующую переменную массива

fscanf(F,"%d",&Mint[i][j]); // &Mint[i][j] - Указатель на массив

// После того как закончили чтение из файла его необходимо закрыть

Написать следующий код для обработки события при нажатии на кнопку «Результат»:

int A; // переменная для результата

Написать следующий код для обработки события при нажатии на кнопку «Выход»: Close();

Поместить в начало программы описания файла, массива и переменных для цикла;

Создать текстовый файл с данными, разделёнными между собой пробелами

Выполнить команду Run/Ran;

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

FILE*F; // описание файла

int Mint[3][3]; // описание массива

int i,j; // описание переменных для циклов

__fastcall TForm1::TForm1(TComponent* Owner)

void __fastcall TForm1::Button4Click(TObject *Sender)

void __fastcall TForm1::Button1Click(TObject *Sender)

// Помещение выбранного пути в Edit1 для использования в операторе

void __fastcall TForm1::Button2Click(TObject *Sender)

if((F=fopen(Edit1->Text.c_str(),"rt"))==NULL) // проверка открытия файла

ShowMessage ("Файл не удаётся открыть");

else ShowMessage ("Файл открыт");

// Чтение информации из файла

// Оператор чтения целой переменной из файла и помещение ёё в соответствующую переменную массива

fscanf(F,"%d",&Mint[i][j]); // &Mint[i][j] - Указатель на массив

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