Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Проблема с переменной (http://forum.oszone.net/showthread.php?t=236890)

O L E G 18-06-2012 13:42 1936285

Проблема с переменной
 
Столкнулся с такой проблемой.
При снятия аттрибута функция на файл ссылается
А при блокировки файла функция по тому же пути не ссылается!
Код:

#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 1936296

Цитата:

Цитата O L E G
system ("attrib -r -s -h %SystemDrive%\\boot.ini"); »

в этой строке вы просто вызываете командную строку с параметрами поэтому %SystemDrive% работает

Цитата:

Цитата O L E G
hAppend = CreateFile(TEXT("%SystemDrive%\\boot.ini"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIB UTE_NORMAL,NULL); »

Здесь вы вы создаете файл средствами с++ и winapi,поэтому %SystemDrive% не работает

O L E G 18-06-2012 14:51 1936327

ммм а как мне указать его на открытие, а не на создание(

ferget 18-06-2012 15:15 1936338

тут слова создаете файл, относятся к названию функции CreateFile, а с данными параметрами она открывает существующий файл

O L E G 18-06-2012 15:33 1936342

вы конечно извените меня но перепробовал все варианты и все так же, вероятно это я додумать не могу что и как
файл у меня существует но его не открывает
Код:

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 1936404

путь к системному диску можно определить так

Код:

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



Время: 21:33.

Время: 21:33.
© OSzone.net 2001-