Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 17:00   #1
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,571
Восклицание [РЕШЕНО] Проблема с сохранением файла в папку с EXE файлом. Сохранятся НЕ туда.

Здравствуйте.

У меня возникла следующая проблема и, следовательно, вопрос по её решению.

У меня есть форма (1), при открытии которой у меня появляется ещё одна (2) модальная. Она нужна мне ТОЛЬКО для того, чтобы получить имя файла (имя файла я получаю при помощи OpenDialog1.FileName – это имя файла я присвоил глобальной переменной модуля 2 PathToFile), который я буду использовать в форме 1, а также для ввода строки, которая будет частью имени сохраняемого файла в форме 1.

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

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

Прошу помощи.

Код прилагается.

Модуль «формы 1»:

Код:
unit Test;

//.............

Procedure SaveProtocol(Reason: Tstring);
// Сохранить протокол тестирования в файл в директорию с программой
var ProtocolName: string;
    P: TextFile;

    j, c, g, m, h: byte;

    STdate, STtime, TimeForTestString, STm, STh: String[12];
    STStartDate, STfinishdate: string[19]; // дата и время начала и конца тестирования
begin


    ProtocolName:='';

    // Расчтитываем число полученных и верных ответов

      c:=0; g:=0;

      for j:=1 to N do if Question[j].Answered then inc(g);

      for j:=1 to N do if Question[j].Right then inc(c);


   // Получаем дату и время сохранения протокола


      STDate:=DateToStr(NOW);
      STtime:=TimeToStr(NOW);

   // Получаем дату и время начала и окончания тестирвоания
      STStartDate:=DateToStr(StartDate) + ' ' + TimeToStr(StartDate);
      StFinishDate:=DateToStr(FinishDate) + ' ' + TimeToStr(FinishDate);



      STm:=''; STh:='';
     // Выделяем  минуты, часы из переменной TimeFortest
 h :=   TimeForTest DIV 3600;
 m :=  (TimeForTest - h*3600) DIV 60 ;

  if TimeForTest = 0 then StM:='НЕОГРАНИЧЕНО'; // часы = минуты = 0

  If H > 0  then StH:=IntToStr(H) + ' ч.  ';

  If M > 0 then StM:=IntToStr(M) + ' мин.';

  TimeForTestString:=STh + STm;

 

   // Производим замену некоторых символов в строках даты и времени

     StDate[3]:='-';
     StDate[6]:='-';

     STtime[3]:='-';
     STtime[6]:='-';


    // надо составить имя протокола

   ProtocolName:=BeforeTest.UserName + ' - ' + Discipline + ' - ';

// Переменная Username в модуле BeforeTest получается так:
// UserName:=Edit1.Text;
 // UserName:=TrimRight(UserName);
// В edit1 не могут содержаться только одни пробелы

   ProtocolName:=ProtocolName + StDate + ' ' +  STtime;


  {Имя протокола имеет вид:
   <Имя пользователя> - <Дисциплина> - <Дата и время сохранения протокола dd-mm-yyyy hh-mm-ss>}

   // Создаём файл, начинаем сохранение
     AssignFile(P, ProtocolName + '.txt');
      ReWrite(P);

___________________________________ _

Модуль «формы 2» (модальной)

Код:
unit BeforeTest;

//...............

procedure TForm5.Button1Click(Sender: TObject);
// Нажата кнопка выбора вопросов
var F: textFile;
    hours, minutes, N: byte;
    Dis: String[60];
    Time: Word;
    StH, StM: String[13];

begin



  if OpenDialog1.Execute then
                            begin
                             AssignFile(F, OpenDialog1.FileName);
                             PathToFile := OpenDialog1.FileName;
                             Reset(F);

                             ReadLn(f, Dis);
                             ReadLn(F, N);
                             ReadLn(F, Time);

                             CloseFile(F);

                            end;

//.....................
Заранее спасибо!

Решение в следующем сообщении

Последний раз редактировалось Вадим Мошев; 30.10.2018 в 17:05.
Вадим Мошев вне форума Ответить с цитированием
Старый 09.01.2011, 17:03   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Исходник не смотрел но сходу скажу:

Код:
ExtractFilePath(Application.ExeName) + 'Имя файла.exe'
Путь для сохранения.

адд: досмотрел исходник. Для сабжа:

Код:
 AssignFile(P, ExtractFilePath(Application.ExeName) + ProtocolName + '.txt');
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 09.01.2011 в 17:06.
Valio вне форума Ответить с цитированием
Старый 09.01.2011, 17:06   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

советую забыть про относительные пути.
всегда дополняйте их до полных.

а в вашей программе видимо есть диалоги(TOpenDialog/TSaveDialog/etc)
они меняют текущую директорию(директорию относительно которой относительный путь и дополняется автоматом)

ну а ответ дан выше, я просто уточнил причины.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.01.2011, 19:14   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,571
По умолчанию

Огромное всем спасибо, всё работает.

Valio Спасибо. Надо будет в дальнейшем запомнить, как это делается, я просто впервые вижу функцию ExtractFilePath и впервые работаю с объектом Application. Спасибо
Вадим Мошев вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c# Как получить вывод cmd.exe с сохранением цвета? undermuz C# (си шарп) 0 07.03.2016 09:14
C++ компилятор g++ под Windows проблема с большим размером .exe файла I_I_I Помощь студентам 0 23.02.2013 11:01
Проблема с сохранением файла mainunit.pas Alginsky Общие вопросы Delphi 20 09.02.2013 21:28
как сделатъ *.exe папку majikku^^sempai Помощь студентам 11 07.03.2010 17:25
(VB) Проблема с сохранением файла phantom4eg Помощь студентам 0 03.06.2009 23:16