Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   CurrenDir (http://forum.oszone.net/showthread.php?t=324785)

null999 13-03-2017 23:57 2719165

CurrenDir
 
Нужно узнать папку, с которой запускается приложение, после подставить это значение для запуска других файлов
для того, что б узнать текущюю папку использую
ExtractFilePath (Application ->ExeName)
но как после того как узнал папку подставить двойные слеши - для запуска других файлов?

opel431 14-03-2017 00:47 2719173

Так вроде так, слеши нужны для функции ExtractFileDir
AnsiString path = ExtractFilePath(Application->ExeName)+FileName; // "MyFile.exe"
или так
AnsiString path = ExtractFileName(ParamStr(0))+FileName
ShowMessage(path);

Iska 14-03-2017 04:07 2719183

Цитата:

Цитата null999
папку, с которой запускается приложение »

Цитата:

Цитата null999
для того, что б узнать текущюю папку »

Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется.

null999 14-03-2017 10:16 2719242

Цитата:

Цитата Iska
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется. »

папка, с которой был запущен exe файл

Iska 14-03-2017 11:36 2719264

null999, текущий каталог, или каталог, в котором находится исполняемый файл?

null999 14-03-2017 11:51 2719272

Iska, каталог, в котором находится исполняемый файл

п.с. я так понимаю, конструкция ".\\" не совсем подходит?

Iska 14-03-2017 12:11 2719284

Цитата:

Цитата null999
п.с. я так понимаю, конструкция ".\\" не совсем подходит? »

Нет. Это как раз будет относительный путь относительно «текущего каталога текущего диска».

А что там не так со слэшами? Экранировать нужно — или что?

null999 14-03-2017 12:16 2719286

у меня и данная конструкция ".\\" срабатывает

Iska 14-03-2017 12:40 2719298

Цитата:

Цитата null999
у меня и данная конструкция ".\\" срабатывает »

null999, а теперь попробуйте запустить файл не из того же каталога, где он расположен ;). Например, открыть командную строку и ввести в неё полный путь к исполняемому файлу.

null999 14-03-2017 17:00 2719416

Iska, файл и нужно запускать строго с того каталога, в котором находится

Iska 14-03-2017 19:01 2719457

null999, не нужно. Если у Вашего файла такое требование — в гробу я видал «…у белых тапках» такой подход к программированию. Не должно существовать таких ограничений у приложений.

opel431 14-03-2017 21:57 2719539

Цитата:

Цитата null999
файл и нужно запускать строго с того каталога, в котором находится »

Такой подход приемлем только для файлов конфигураций и портативных программ!

Iska 14-03-2017 23:58 2719586

Цитата:

Цитата opel431
Такой подход приемлем только для файлов конфигураций и портативных программ! »

Не, в этом случае всё как раз-таки нормально: просто используется вариант «откуда бы не запустили приложение — конфигурацию смотрим по месторасположению исполняемого файла». А вот именно что требования «запускать исполняемый файл токмо отсель, и не иначе» — ни разу не встречал.

null999 15-03-2017 11:30 2719661

Iska, но будет ли этот плохой метод работать, если его запустят с другого пути, но папка и подпапки останутся те же ?

Iska 15-03-2017 19:29 2719766

null999, не смог осмыслить вопрос.

greg zakharov 16-03-2017 09:44 2719896

Код:

#ifndef UNICODE
  #define UNICODE
#endif

#include <windows.h>
#include <cstdio>
#include <string>
#include <cstring>

void PrintWin32Error(void) {
  HLOCAL msg;
  FormatMessage(
      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
      NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
      (LPWSTR) &msg, 0, NULL
  );
  wprintf(L"%s", msg);
  LocalFree(msg);
}

int wmain(void) {
  std::wstring path(L"", MAX_PATH);

  if (0 == GetModuleFileName(NULL, (LPWSTR)path.c_str(), MAX_PATH)) {
    PrintWin32Error();
    return -1;
  }

  path = path.substr(0, path.find_last_of(L"\\/"));
  wprintf(L"Executable path    : %s\n", path);
  wprintf(L"Some another path1 : %s\n", path + L"\\file1.txt");
  wprintf(L"Some another path2 : %s\n", path + L"\\file2.exe");

  return 0;
}



Время: 22:40.

Время: 22:40.
© OSzone.net 2001-