- -
CurrenDir
(
http://forum.oszone.net/showthread.php?t=324785)
CurrenDir
Нужно узнать папку, с которой запускается приложение, после подставить это значение для запуска других файлов
для того, что б узнать текущюю папку использую
ExtractFilePath (Application ->ExeName)
но как после того как узнал папку подставить двойные слеши - для запуска других файлов?
|
Так вроде так, слеши нужны для функции ExtractFileDir
AnsiString path = ExtractFilePath(Application->ExeName)+FileName; // "MyFile.exe"
или так
AnsiString path = ExtractFileName(ParamStr(0))+FileName
ShowMessage(path);
|
Цитата:
Цитата null999
папку, с которой запускается приложение »
|
Цитата:
Цитата null999
для того, что б узнать текущюю папку »
|
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется.
|
Цитата:
Цитата Iska
Первое и второе — это два разных каталога, которые могут и совпадать. Определитесь, что именно Вам требуется. »
|
папка, с которой был запущен exe файл
|
null999, текущий каталог, или каталог, в котором находится исполняемый файл?
|
Iska, каталог, в котором находится исполняемый файл
п.с. я так понимаю, конструкция ".\\" не совсем подходит?
|
Цитата:
Цитата null999
п.с. я так понимаю, конструкция ".\\" не совсем подходит? »
|
Нет. Это как раз будет относительный путь относительно «текущего каталога текущего диска».
А что там не так со слэшами? Экранировать нужно — или что?
|
у меня и данная конструкция ".\\" срабатывает
|
Цитата:
Цитата null999
у меня и данная конструкция ".\\" срабатывает »
|
null999, а теперь попробуйте запустить файл не из того же каталога, где он расположен ;). Например, открыть командную строку и ввести в неё полный путь к исполняемому файлу.
|
Iska, файл и нужно запускать строго с того каталога, в котором находится
|
null999, не нужно. Если у Вашего файла такое требование — в гробу я видал «…у белых тапках» такой подход к программированию. Не должно существовать таких ограничений у приложений.
|
Цитата:
Цитата null999
файл и нужно запускать строго с того каталога, в котором находится »
|
Такой подход приемлем только для файлов конфигураций и портативных программ!
|
Цитата:
Цитата opel431
Такой подход приемлем только для файлов конфигураций и портативных программ! »
|
Не, в этом случае всё как раз-таки нормально: просто используется вариант «откуда бы не запустили приложение — конфигурацию смотрим по месторасположению исполняемого файла». А вот именно что требования «запускать исполняемый файл токмо отсель, и не иначе» — ни разу не встречал.
|
Iska, но будет ли этот плохой метод работать, если его запустят с другого пути, но папка и подпапки останутся те же ?
|
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.
© OSzone.net 2001-