Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Проблема с переменной

Ответить
Настройки темы
C/C++ - [решено] Проблема с переменной

Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16


Конфигурация

Профиль | Отправить PM | Цитировать


Столкнулся с такой проблемой.
При снятия аттрибута функция на файл ссылается
А при блокировки файла функция по тому же пути не ссылается!
Код: Выделить весь код
#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 );
}
}

Отправлено: 13:42, 18-06-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата 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% не работает

Отправлено: 14:06, 18-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


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

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 14:51, 18-06-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:15, 18-06-2012 | #4


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


вы конечно извените меня но перепробовал все варианты и все так же, вероятно это я додумать не могу что и как
файл у меня существует но его не открывает
Код: Выделить весь код
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% и так далее

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 15:33, 18-06-2012 | #5


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 17:04, 18-06-2012 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Проблема с переменной

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - поиск в переменной спецсимволов vosya Скриптовые языки администрирования Windows 1 05-01-2012 01:27
7 / 2008 R2 - [решено] Проблема при создании переменной DiskRoot zatar Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 4 22-12-2011 22:15
[решено] Проблема с переменной Temp Alex007 Автоматическая установка Windows 2000/XP/2003 7 31-08-2006 08:19
js имя объекта из переменной, как? E-mail Вебмастеру 13 15-03-2005 07:22




 
Переход