Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Директория сохранения

19.11.2011, 12:34. Показов 5176. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят еще одна задача непосильная такому ассу как я...

Таким образом я сохраняю данные из Мемо:
C++
1
2
3
4
5
6
7
8
AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
Все работает отлично, но появилась необходимость дать пользователю самому выбрать дирикторию и создать папку в которой и будут создаваться файлы с названием "DateToStr(Date())+" Journal.txt"
Как зделать чтоб по умолчанию оставалось как есть (тоесть с exeшником в папке сохранялось) а если пользователь решил сменить дирикторию то сохранять в новую папку?
хотелось бы создать новую форму и на ней все дела касающиеся выбора дириктории...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2011, 12:34
Ответы с готовыми решениями:

Директория прогрммы
Назрел вопрос!!! друзья помогите=) 1)вот хочу сохранить текстовый файл в директорию своей прогрммы...как это осуществить=)??? 2)как,...

Не удаляется директория
Всем привет. Ребята подскажите пожалуйста по чему данная функция не всегда удаляет не пустую директорию. int Remove_dirW(wchar_t *...

Имя и директория файла
При добавлении имени файла в listbox(nme) пишет ошибку.Думаю это связано с 1 и 2. Но как тогда получить директ файла и его имя. void...

10
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.11.2011, 12:57
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename)) {
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
  }
  else if (SaveDialog->Execute) {
    filename = DateToStr(Date())+"_Journal.txt";
    SaveDialog->FileName = filename;
    temp_log->SaveToFile(SaveDialog->FileName);
  }
Добавлено через 1 минуту
TSaveDialog на вкладке Dialog в палитре компонентов

Добавлено через 1 минуту
обрати внимание:
"_Journal.txt"
, а не
" Journal.txt"
Добавлено через 9 минут
хотелось бы создать новую форму и на ней все дела касающиеся выбора дириктории...
так создавай - кидай туда DirectoryListBox и прочие причандалы... но зачем , коль все кончится все тем же саведиалогом
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.11.2011, 13:21  [ТС]
У меня это
C++
1
2
3
4
5
6
7
8
AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
происходит в событии Мемо OnGange
здесь вызывать SaveDialog нельзя.

я кинул Button на форму и пытаюсь там вызвать SaveDialog, и мне выдает ошибку
C++
1
[BCC32 Error] Unit1.cpp(3712): E2235 Member function must be called or its address taken
и еще в событии Мемо OnGange тогда что писать?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.11.2011, 13:40
видимо,
SaveDialog->Execute()


Добавлено через 2 минуты
происходит в событии Мемо OnGange
это в корне неправильно, потому что ты будешь дергать "сохранение" при любом телодвижении в меме, смотри по логике работы приложения, где сохранение целесообразно

хорошо, что не в OnGangster

Добавлено через 6 минут
по хорошему - здесь нужен чекбокс с шапкой "Сохранение по умолчанию" возле мемо , а не кнопка - если он выбран, сохраняем по умолчанию, если нет - используем диалог сохранения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (CheckBox->Checked == true) {
  AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename)) {
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
}
else if (SaveDialog->Execute) {
  filename = DateToStr(Date())+"_Journal.txt";
  SaveDialog->FileName = filename;
  temp_log->SaveToFile(SaveDialog->FileName);
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.11.2011, 13:58  [ТС]
LK извини я не очень подробно описал что к чему, попробую исправиться...
угадыватель кода так и не нашелся как я посмотрю

1. Во время исполнения программы у меня происходят интересные события, которые я записываю в Мемо таким образом:
C++
1
Memo1->Add
2. Паралельно записи в Мемо я записываю данные и в переменную log:
C++
1
2
log = new TStringList;
log->Add
3. И теперь в событии Мемо OnGange сохраняю в txt файл:
C++
1
2
3
4
5
6
7
8
AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
Все действия разделено на этапы и идут други за другом, в результате в журнал записываються данные и если файл уже существует то дописываются.
Ну собственно вопрос, как дать пользователю возможность выбрать место где создать и назвать папку, куда будет сохраняться файл "+DateToStr(Date())+" Journal.txt"
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.11.2011, 14:04
т.е., при каждом Memo1->Add ты пишешь в файл ?
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.11.2011, 14:06  [ТС]
точнее дописываю.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.11.2011, 14:21
ты хотел использовать кнопку - так используй - обозви ее "Сохранить как..." и сохраняй через СейвДиалог

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// в конструкторе форме указываешь имя файла по умолчанию
__fastcall TForm1::TForm(TComponent* Owner)
    : TForm(Owner)
{
  AnsiString fname = DateToStr(Date())+"_Journal.txt";
  SaveDialog1->FileName = fname;
}
//--------------------------------------------------------------------------
void __fastcall TfrmFrame::Button1Click(TObject *Sender)
{
  if (SaveDialog1->Execute()) {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
  }
}
//--------------------------------------------------------------------------
файл будет записан в ту директорию, которую выберет пользователь с именем DateToStr(Date())+"_Journal.txt" , если пользователь его не изменит, гад ...
что не понятно ?
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.11.2011, 14:21  [ТС]
мне тогда каждый раз надо кнопку нажимать. Я вот подумал и пришел к мысли что надо сделать таким образом:
1. cтавим CheckBox1 "выбрать дирикторию сохранения журнала", в положение Checked=true.
2. кнопка сохранить как, нажимаем выбираем создаем новую папку, закрываем Диалог.
3. при закрытии Диалога пишем в Edit1 путь к новой папке.
4. в событии Мемо OnGange пишем как ты рекомендовал ранее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (CheckBox1->Checked==true)
сохраняем в папку прописанную в Edit1
else
Сохраняем по умолчанию...
AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
Вопрос как прикрутить Edit к этому всему?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.11.2011, 14:39
1. первый раз пользователь сохраняет, используя СейвДиалог:
C++
1
2
3
4
5
6
7
if (SaveDialog1->Execute()) {
    //...
  // пишем в эдит путь
  Edit->Text = ExtractFilePath(SaveDialog->FileName);
  // или путь с именем
  Edit->Text = SaveDialog->FileName;
}
2. делаешь еще один чекюокс : "Запомнить последнее сохранение?"
при следующем сохранении - если ЧБ выбран -
C++
1
2
3
4
if (SaveDialog1->Execute()) {
  SaveDialog->FileName = Edit->Text;
  //...
}
3. или без чекбокса - в Edit->Text изначально прописываешь путь по умолчанию
C++
1
SaveDialog->FileName = Edit->Text;
4. если пользователь изменил путь (в любом случае, даже если не изменил)
C++
1
Edit->Text = SaveDialog->FileName;
Миниатюры
Директория сохранения   Директория сохранения   Директория сохранения  

1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
19.11.2011, 15:05  [ТС]
Все работает как надо! Спасибо!
Поделюсь результатом с месной аудиторией:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::LogMemoChange(TObject *Sender)
{ 
if (CheckBox22->Checked==true) {
  AnsiString filename=Edit4->Text + ".txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
  } 
else 
  AnsiString filename=GetCurrentDir()+"\\Log\\"+DateToStr(Date())+" Journal.txt";
  TStringList *temp_log = new TStringList;
  if (FileExists(filename))
  temp_log->LoadFromFile(filename);
  temp_log->AddStrings(log);
  temp_log->SaveToFile(filename);
  log->Clear();
  delete temp_log;
}
а ларчик просто открывался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2011, 15:05
Помогаю со студенческими работами здесь

Файл или Директория?
Всем день добрый. Ребята подскажите есть ли такая функция которая определяет, что ей дали в параметрах файл или директория\папка? ...

директория obj в BCB5&6
Кто-нибудь знает как сделать, чтобы BCB создавал obj в папке проекта ? А то директорию с моими либами хламит. Как это делает IAR, MSVC

Сохранения в текстовый файл
#include <stdio.h> #include <ctype.h> #include <conio.h> #include <stdlib.h> #include <math.h> #include <iostream.h> #include...

Не запускается после сохранения
Добрый день. нужна помощь. в Borland C++ 6 не могу после сохранения запустить програму, выдает кауюто ошибку. может кто сталкивался с этим?...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru