Показать полную графическую версию : [решено] Переменные среды
пытался указать пути к файлам
%windir%\\ и \ и / и //,%systemdrive%,%homedrive%,%system32%
С++ не видит путь,но при стандартном указании, работает
C://123.txt
C://Windows//system32//123.txt
понимает ли он вообще Среды?
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)
тут пример
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426(v=vs.85).aspx
Спасибо Народ за помощь, разобрался
Кому надо смотрим: Пример
Сниманаю аттрибуты с файла 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 );
}
Оригинально.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.