Я работаю над программой, которую нужно распаковать .zip
файлы. Попробовав несколько разных способов сделать это, я смог найти только один, который работал для всех моих потребностей. 7z.exe
, Он прекрасно работает во время разработки, так как я могу просто жестко закодировать местоположение исполняемого файла в коде. Однако, если кто-то еще попытается использовать его, эта часть не будет работать. Есть ли способ разрешить им доступ к этому? Спасибо!
Я предлагаю вам использовать библиотеку сжатия (взгляните на libarchive: http://www.libarchive.org). Если вы не можете этого сделать, вы должны отправить 7z.exe и его зависимости вместе с вашим приложением, поместив их в фиксированное относительное расположение к вашему основному исполняемому файлу.
Тогда вы получите свой основной исполняемый абсолютный путь, используя GetModuleFileName
, раздеть и объединить с относительным путем, используя PathCchCombine
:
char filename[MAX_PATH];
GetModuleFileName(NULL,filename,(sizeof(filename))/(sizeof char));
PathCchRemoveFileSpec(filename,(sizeof(filename))/(sizeof char));
PathCchCombine(filename,(sizeof(filename))/(sizeof char),filename,"./7zip/7zip.exe");
//the absolute path of 7z.exe is now in filename
Документация для GetModuleFileName
:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx
PathCchRemoveFileSpec
:
http://msdn.microsoft.com/en-us/library/hh707092(v=vs.85).aspx
и для PathCchCombine
:
http://msdn.microsoft.com/en-us/library/hh707085(v=vs.85).aspx
Других решений пока нет …