Войти

Показать полную графическую версию : [решено] Переменные среды


O L E G
15-06-2012, 16:03
пытался указать пути к файлам

%windir%\\ и \ и / и //,%systemdrive%,%homedrive%,%system32%

С++ не видит путь,но при стандартном указании, работает

C://123.txt
C://Windows//system32//123.txt

понимает ли он вообще Среды?

lxa85
15-06-2012, 16:52
O L E G, C++ среды не понимает. Т.к. он за них не отвечает.
Кто-то должен разименовать переменную.
Т.е. надо кого-то/что-то спросить, кто переведет %windir% в строку.
Значит надо использовать какую-либо библиотеку, которая поможет в этом деле.
И ее, библиотеку, естественно надо правильно об этом попросить.
GetSystemWindowsDirectory function (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724403(v=vs.85).aspx)
File System Redirector (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx)
Shell.NameSpace method (http://msdn.microsoft.com/en-us/library/windows/desktop/bb774085(v=vs.85).aspx)
GetEnvironmentVariable function (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v=vs.85).aspx)

ferget
15-06-2012, 17:19
тут пример

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426(v=vs.85).aspx

O L E G
18-06-2012, 12:13
Спасибо Народ за помощь, разобрался
Кому надо смотрим: Пример
Сниманаю аттрибуты с файла 45.txt в папке %Temp%
Работоспособность 100%

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

TCHAR* envVarStrings[] =
{
TEXT("%OS%"), // ващи пути которые будут указанны в работе
TEXT("%PATH%"),
TEXT("%HOMEPATH%"),
TEXT("%TEMP%"),
TEXT("%SystemDrive%")
};
#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(TCHAR*))
#define INFO_BUFFER_SIZE 32767
void printError( TCHAR* msg );

void main( )
{
DWORD i;
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;

system ("attrib -r -s -h %TEMP%\\45.txt"); // снимаю атрибуты с файла
}

void printError( TCHAR* msg )
{
DWORD eNum;
TCHAR sysMsg[256];
TCHAR* p;

eNum = GetLastError( );
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, eNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
sysMsg, 256, NULL );

// Trim the end of the line and terminate it with a null
p = sysMsg;
while( ( *p > 31 ) || ( *p == 9 ) )
++p;
do { *p-- = 0; } while( ( p >= sysMsg ) &&
( ( *p == '.' ) || ( *p < 33 ) ) );

// Display the message
_tprintf( TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg );
}

Iska
18-06-2012, 12:41
Оригинально.

GetFileAttributes function (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx)
SetFileAttributes function (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx)




© OSzone.net 2001-2012