Войти

Показать полную графическую версию : CurrenDir


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

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

Iska
14-03-2017, 04:07
папку, с которой запускается приложение »
для того, что б узнать текущюю папку »
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется.

null999
14-03-2017, 10:16
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется. »
папка, с которой был запущен exe файл

Iska
14-03-2017, 11:36
null999, текущий каталог, или каталог, в котором находится исполняемый файл?

null999
14-03-2017, 11:51
Iska, каталог, в котором находится исполняемый файл

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

Iska
14-03-2017, 12:11
п.с. я так понимаю, конструкция ".\\" не совсем подходит? »
Нет. Это как раз будет относительный путь относительно «текущего каталога текущего диска».

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

null999
14-03-2017, 12:16
у меня и данная конструкция ".\\" срабатывает

Iska
14-03-2017, 12:40
у меня и данная конструкция ".\\" срабатывает »
null999, а теперь попробуйте запустить файл не из того же каталога, где он расположен ;). Например, открыть командную строку и ввести в неё полный путь к исполняемому файлу.

null999
14-03-2017, 17:00
Iska, файл и нужно запускать строго с того каталога, в котором находится

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

opel431
14-03-2017, 21:57
файл и нужно запускать строго с того каталога, в котором находится »Такой подход приемлем только для файлов конфигураций и портативных программ!

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

null999
15-03-2017, 11:30
Iska, но будет ли этот плохой метод работать, если его запустят с другого пути, но папка и подпапки останутся те же ?

Iska
15-03-2017, 19:29
null999, не смог осмыслить вопрос.

greg zakharov
16-03-2017, 09:44
#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;
}




© OSzone.net 2001-2012