Войти

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


O L E G
18-06-2012, 13:42
Столкнулся с такой проблемой.
При снятия аттрибута функция на файл ссылается
А при блокировки файла функция по тому же пути не ссылается!

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

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

using namespace std;
int main()
{
DWORD i;
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;

HANDLE hAppend;
DWORD dwBytesRead=10, dwBytesWritten=10, dwPos=0;

system ("attrib -r -s -h %SystemDrive%\\boot.ini"); // работает путь
hAppend = CreateFile(TEXT("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); // не работате путь, но если указать C: то работает
int k=0;
while(k!=1)
UnlockFile(hAppend, dwPos, 0, dwBytesRead, 0);
return 0;
}


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 );
}
}

ferget
18-06-2012, 14:06
system ("attrib -r -s -h %SystemDrive%\\boot.ini"); »
в этой строке вы просто вызываете командную строку с параметрами поэтому %SystemDrive% работает

hAppend = CreateFile(TEXT("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); »
Здесь вы вы создаете файл средствами с++ и winapi,поэтому %SystemDrive% не работает

O L E G
18-06-2012, 14:51
ммм а как мне указать его на открытие, а не на создание(

ferget
18-06-2012, 15:15
тут слова создаете файл, относятся к названию функции CreateFile, а с данными параметрами она открывает существующий файл

O L E G
18-06-2012, 15:33
вы конечно извените меня но перепробовал все варианты и все так же, вероятно это я додумать не могу что и как
файл у меня существует но его не открывает

hAppend = CreateFile(TEXT("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);// не раб
hAppend = (TEXT("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); // не раб
hAppend = (("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); // не раб
hAppend = CreateFile(TEXT("C:\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); // раб

но мне надо что бы работало с переменными %windir% и так далее

ferget
18-06-2012, 17:04
путь к системному диску можно определить так

TCHAR sysBuf[INFO_BUFFER_SIZE];
if( !GetSystemDirectory( sysBuf, INFO_BUFFER_SIZE ) )
cerr<<"No dir"<<endl;
sysBuf[3]=0;//в sysBuf путь к системному диску:\




© OSzone.net 2001-2012