Показать полную графическую версию : CurrenDir
Нужно узнать папку, с которой запускается приложение, после подставить это значение для запуска других файлов
для того, что б узнать текущюю папку использую
ExtractFilePath (Application ->ExeName)
но как после того как узнал папку подставить двойные слеши - для запуска других файлов?
Так вроде так, слеши нужны для функции ExtractFileDir
AnsiString path = ExtractFilePath(Application->ExeName)+FileName; // "MyFile.exe"
или так
AnsiString path = ExtractFileName(ParamStr(0))+FileName
ShowMessage(path);
папку, с которой запускается приложение »
для того, что б узнать текущюю папку »
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется.
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется. »
папка, с которой был запущен exe файл
null999, текущий каталог, или каталог, в котором находится исполняемый файл?
Iska, каталог, в котором находится исполняемый файл
п.с. я так понимаю, конструкция ".\\" не совсем подходит?
п.с. я так понимаю, конструкция ".\\" не совсем подходит? »
Нет. Это как раз будет относительный путь относительно «текущего каталога текущего диска».
А что там не так со слэшами? Экранировать нужно — или что?
у меня и данная конструкция ".\\" срабатывает
у меня и данная конструкция ".\\" срабатывает »
null999, а теперь попробуйте запустить файл не из того же каталога, где он расположен ;). Например, открыть командную строку и ввести в неё полный путь к исполняемому файлу.
Iska, файл и нужно запускать строго с того каталога, в котором находится
null999, не нужно. Если у Вашего файла такое требование — в гробу я видал «…у белых тапках» такой подход к программированию. Не должно существовать таких ограничений у приложений.
файл и нужно запускать строго с того каталога, в котором находится »Такой подход приемлем только для файлов конфигураций и портативных программ!
Такой подход приемлем только для файлов конфигураций и портативных программ! »
Не, в этом случае всё как раз-таки нормально: просто используется вариант «откуда бы не запустили приложение — конфигурацию смотрим по месторасположению исполняемого файла». А вот именно что требования «запускать исполняемый файл токмо отсель, и не иначе» — ни разу не встречал.
Iska, но будет ли этот плохой метод работать, если его запустят с другого пути, но папка и подпапки останутся те же ?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.