Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
#1

Чтение массива объектов и регистрация расширения файла - C++

06.09.2010, 19:58. Просмотров 1021. Ответов 15
Метки нет (Все метки)

Делаю небольшую программу. Она должна открывать некий файл и обрабатываются данные из него.
В общем есть некая структура Object. Из файла считывается число n и нужно создать массив этих Object из n элементов.
Плюс, желательно сделать, чтобы можно было открыть файл с помощью моей программы. То есть я дважды щелкаю по файлу и открывается моя программа, выполняя определенные действия с этим файлом.
Как это сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2010, 19:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение массива объектов и регистрация расширения файла (C++):

Чтение объектов из файла - C++
Пожалуйста, помогите с поиском ошибки. Суть - чтение объектов из файла, 3 столбца и n строк. Путем нехитрых манипуляций я понял, что,...

Вывод в файл и последующее чтение из файла объектов класса - C++
Как наиболее правильно и канонично выводить (так чтобы потом ещё и прочитать) объекты классов в файл? Представим ситуацию: Есть класс...

Добавить вывод в файл и чтение из файла объектов класса - C++
Добавить вывод в файл и чтение из файла объектов класса. Работа должна отображаться на мониторе. Прошу не много подсабить. #include...

Считывание массива объектов из файла - C++
Здравствуйте! Надеюсь на вашу помощь. Задача состоит в том, чтоб считать из файла данные и поместить каждую строку в новый объект, для...

Чтение массива из файла - C++
Здравствуйте! Возникла проблема со считыванием матрицы... for(int i=0;i<y;i++){ for(int j=0;j<x;j++){ fi>>*(ptd+y*i+j); ...

Чтение из файла массива - C++
Пожалуйста помогите разобрать чтение двумерного масиива из файла(не могу найти чтото понятное(

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.09.2010, 20:02 #2
MkG,

Код такой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
 
struct Object
{
//Элементы
};
 
int main()
{
    int n;
    std::ifstream ifs;
    ifs.open("Test.txt");
    ifs>>n;
    Object ObArr[n];
    //И далее
    return 0;
}
0
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
06.09.2010, 20:11  [ТС] #3
У меня в Dev-Cpp вылезает ошибка variable-sized object `ObArr' may not be initialized.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.09.2010, 20:18 #4
MkG, М. Ну структура то пустая. Заполните ее чем-нибудь.
Если будет продолжать напишите.

C++
1
2
Object*ObArr;
ObArr=new Object[n];
0
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
06.09.2010, 20:27  [ТС] #5
Все теперь работает. A что насчет
Плюс, желательно сделать, чтобы можно было открыть файл с помощью моей программы. То есть я дважды щелкаю по файлу и открывается моя программа, выполняя определенные действия с этим файлом.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.09.2010, 20:32 #6
MkG, Стандартом языка это не предусмотрено. А вот к WinApi можете попробовать обратиться
0
afiskon
65 / 53 / 3
Регистрация: 06.09.2010
Сообщений: 254
06.09.2010, 21:10 #7
Нужно добавить запись в реестре, что программа такая-то отвечает за обработку файлов таких-то. Делается это, действительно, с помощью WinApi.
0
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
06.09.2010, 21:15  [ТС] #8
2afiskon.
А можно поподробнее? Что вписать в реестр и что вписать в программу, чтобы она знала, что делать с файлом, который ей пытаются впихнуть?
0
afiskon
65 / 53 / 3
Регистрация: 06.09.2010
Сообщений: 254
06.09.2010, 21:24 #9
Честно говоря я уже очень давно ничего не писал под windows. Советую поискать в google, особенно полезным может оказаться поиск в блогах. Кроме того, посмотрите собственный реестр, сделайте поиск по имени программы браузера (firefox.exe, opera.exe или что там у Вас) - там по большому счету должно быть очевидно что и куда записать. Но вообще-то с реестром нужно быть осторожнее - не забывайте делать резервную копию системы.
0
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
06.09.2010, 21:26  [ТС] #10
А как искать?
0
afiskon
65 / 53 / 3
Регистрация: 06.09.2010
Сообщений: 254
06.09.2010, 21:27 #11
Уж пользоваться google.com, будьте любезны, научитесь самостоятельно.
0
Mencey
147 / 94 / 7
Регистрация: 22.07.2010
Сообщений: 424
06.09.2010, 21:51 #12
Вот нагуглил код процедуры(на Delphi) короче функция делает так чтобы файл с разрешением ext открывался программой FileName.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.RegisterFileType(ext: string; FileName: string);
var
  reg: TRegistry;
begin
  reg:=TRegistry.Create;
  with reg do
  begin
    RootKey:=HKEY_CLASSES_ROOT;
    OpenKey('.'+ext,True);
    WriteString('',ext+'file');
    CloseKey;
    CreateKey(ext+'file');
    OpenKey(ext+'file\DefaultIcon',True);
    WriteString('',FileName+',0');
    CloseKey;
    OpenKey(ext+'file\shell\open\command',True);
    WriteString('',FileName+' "%1"');
    CloseKey;
    Free;
  end;
end;
Пример работы:
RegisterFileType('DelphiWorld', Application.ExeName);
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
06.09.2010, 21:53 #13
Цитата Сообщение от MkG Посмотреть сообщение
То есть я дважды щелкаю по файлу и открывается моя программа, выполняя определенные действия с этим файлом.
Присваиваете файлу какое-нибудь уникальное расширение (типа file.xyz), в проводнике два раза по нему щёлкаете, винда говорит, что не знает, что с ним делать, предлагает в сети что-нибудь поискать, отказываетесь (выбираете "указать программу"), в появившемся окне находите свою программу, следите за тем, чтобы был отмечен чекбокс "открывать этой программой все файлы с этим расширением", всё. Вот, правда, программу после этого в другое место переносить нельзя. Так, что, лучше её (программу) сначала куда-нибудь в program files засунуть...
0
MkG
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 25
06.09.2010, 22:14  [ТС] #14
Mencey, я не знаю Delphi.
Easybudda, я знаю, как ассоциировать файл определенного типа с определенной программой. Я не знаю, как заставить программу корректно работать с файлом.
0
Mencey
147 / 94 / 7
Регистрация: 22.07.2010
Сообщений: 424
06.09.2010, 22:27 #15
Код некомпилил такчто возможны ошибки. Ну думаю в целом понятно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <conio.h>
 
int main(int argc, char* argv[])
// argc - кол-во аргументов командной строки, argv - аргументы командной строки
{
  // Первый аргумент имя программы
  printf( "%s\n", argv[0] );
  // Например елси твоей программой открывают файл, то фторым имя открываемого файла
  if( argc <= 1 )
    return 1;
  printf( "%s", argv[1] );  
  getch();
  return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2010, 22:27
Привет! Вот еще темы с ответами:

Чтение массива из файла - C++
Здравствуйте, господа. Заранее извиняюсь за то, что задаю, скорее всего, не самый умный вопрос на этом форуме и за то, что такая тема...

Чтение массива из файла - C++
Здравствуйте, у меня есть массив arr, как я могу прочитать в него из файла следующую запись 0111000011 0000011011 0100011000 ...

Чтение массива из файла - C++
Всем здравствуйте! Помогите, пожалуйста, чайнику. В программе надо сделать, чтобы массив читался из файла, а не вводился в ручную и чтобы...

Чтение массива из файла - C++
Здравствуйте, подскажите, пожалуйста почему не происходит чтение из файла #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.09.2010, 22:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru