Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2013, 21:49   #1
slipp
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 21
Счастье обход директории

обхожу диск с:\ таким образом

Код:
#include <iostream>
using namespace std;

#include <iterator>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;

#include <thread>

int main(int argc, char* argv[])
{
  system("chcp 1251");

  if (argc < 2)//если нету аргумента командной строки
  {
    cout << "Usage: enter path\n";
    return 1;
  }

  path p (argv[1]);   // p reads clearer than argv[1] in the following code
 
  uintmax_t folderSize=0;
  for(recursive_directory_iterator recit(p);recit!=recursive_directory_iterator();recit++)
  {
    if(is_regular_file(*recit))
      {
        folderSize+=file_size(*recit);
      }
  }
  cout<<folderSize<<endl;

  return 0;
}
при доступе к системным папкам программа валится, очевидн онужны права администратора...

каким образом их получить??
slipp вне форума Ответить с цитированием
Старый 07.11.2013, 22:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это винда? Может стоит вместо бустера использовать WIN API?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2013, 22:41   #3
slipp
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 21
Лампочка

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это винда? Может стоит вместо бустера использовать WIN API?
винда.
но задача стоит построить на boost'e.
slipp вне форума Ответить с цитированием
Старый 08.11.2013, 00:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Понятно... Насчет прав админа сложнее будет.
Попробуй почитай про cacls, может что-то надыбаешь.
А в принципе если не ошибаюсь нужно юзать SetFileSecurity() для установки прав на каталог. Но все это чревато проблемами, сам когда-то занимался безопасностью, и из опыта скажу что это не два пальца об асфальт.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2013, 10:26   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от slipp Посмотреть сообщение
каким образом их получить??
А) Добавить manifest, где будет указано, что нужны админ права и надеяться, что потребитель их даст.
Б) Потребовать от потребителя чтоб запустил приложение "run as administrator" диалогом или иным удобным способом.
В) Взломать учетную запись админа.

Цитата:
Сообщение от Stilet Посмотреть сообщение
нужно юзать SetFileSecurity() для установки прав на каталог.
Для этого нужно быть админом либо владельцем каталога. Если владелец, то вопрос не стоит, если админ, то все равно в большинство каталогов доступ уже есть, если куда и нет, так лучше туда и не лазить.

Последний раз редактировалось Stilet; 08.11.2013 в 11:23.
waleri вне форума Ответить с цитированием
Старый 09.11.2013, 16:58   #6
slipp
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 21
Счастье

использую вот такой манифест
Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="boost1"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>
к ниже указанным директориям доступа нет! программа валится под abort()
Код:
path mypath="c:\\windows\\csc";
path mypath="c:\\System Volume Information";
но при всем этом к директории
Код:
//path mypath="c:\\MSOCache";
доступ есть.
как подключаю манифест и какая ошибка показано во вложении.

что не так делаю?
Изображения
Тип файла: jpg man.jpg (107.7 Кб, 104 просмотров)
Тип файла: jpg abort2.jpg (43.1 Кб, 35 просмотров)
slipp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сканирование директории D!zel Общие вопросы Delphi 8 22.12.2009 21:11
Обход Н/Д Slavik Microsoft Office Excel 2 09.05.2009 00:49
выбор директории Var17 Win Api 5 13.05.2008 13:50
отправка директории kommunist Работа с сетью в Delphi 2 19.01.2008 17:24