AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.06.2021, 10:24   #1  
oleggy is offline
oleggy
Участник
 
154 / 18 (1) ++
Регистрация: 03.12.2019
DAX09 как узнать наличие своб.места на диске
Привет.
Стоит задача определения кол-ва свободного места на ПК клиента.
Не нашел метод. Может есть?

Сам обратился к Net.

Нашел вот тут:
https://docs.microsoft.com/ru-ru/dot...tframework-2.0

Пример на C#:
X++:
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        DriveInfo[] allDrives = DriveInfo.GetDrives();

        foreach (DriveInfo d in allDrives)
        {
            Console.WriteLine("Drive {0}", d.Name);
            Console.WriteLine("  Drive type: {0}", d.DriveType);
            if (d.IsReady == true)
            {
                Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
                Console.WriteLine("  File system: {0}", d.DriveFormat);
                Console.WriteLine(
                    "  Available space to current user:{0, 15} bytes",
                    d.AvailableFreeSpace);

                Console.WriteLine(
                    "  Total available space:          {0, 15} bytes",
                    d.TotalFreeSpace);

                Console.WriteLine(
                    "  Total size of drive:            {0, 15} bytes ",
                    d.TotalSize);
            }
        }
    }
}
/*
This code produces output similar to the following:

Drive A:\
  Drive type: Removable
Drive C:\
  Drive type: Fixed
  Volume label:
  File system: FAT32
  Available space to current user:     4770430976 bytes
  Total available space:               4770430976 bytes
  Total size of drive:                10731683840 bytes
Drive D:\
  Drive type: Fixed
  Volume label:
  File system: NTFS
  Available space to current user:    15114977280 bytes
  Total available space:              15114977280 bytes
  Total size of drive:                25958948864 bytes
Drive E:\
  Drive type: CDRom

The actual output of this code will vary based on machine and the permissions
granted to the user executing it.
*/


Подскажите как сохранить коллекцию в X++ как это сделано на

C#:
X++:
DriveInfo[] allDrives = DriveInfo.GetDrives();
Кажется в AX это должно быть так:
X++:
System.IO.DriveInfo allDrives; 
allDrives = System.IO.DriveInfo::GetDrives(); // <-- ошибка
Но ошибка.
Вопрос, как корректно в AX определить коллекцию allDrives типа DriveInfo ?

Последний раз редактировалось oleggy; 07.06.2021 в 11:08.
Старый 07.06.2021, 10:54   #2  
Pandasama is offline
Pandasama
Участник
 
266 / 66 (3) ++++
Регистрация: 11.08.2014
Адрес: Барнаул
это статический метод
System.IO.DriveInfo::GetDrives()
Старый 07.06.2021, 11:11   #3  
oleggy is offline
oleggy
Участник
 
154 / 18 (1) ++
Регистрация: 03.12.2019
Цитата:
Сообщение от Pandasama Посмотреть сообщение
это статический метод
System.IO.DriveInfo::GetDrives()
Не понял на счет статического метода. Я не смогу сохранить в какой либо экземпляр коллекцию дисков?

Напишите тогда как корректно вызвать?

Последний раз редактировалось oleggy; 07.06.2021 в 11:18.
Старый 07.06.2021, 11:37   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,307 / 1634 (61) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от oleggy Посмотреть сообщение
Напишите тогда как корректно вызвать
Вот так?
Код:
System.IO.DriveInfo[] allDrives; 
allDrives = System.IO.DriveInfo::GetDrives();
За это сообщение автора поблагодарили: Pandasama (2), oleggy (1).
Старый 07.06.2021, 12:47   #5  
oleggy is offline
oleggy
Участник
 
154 / 18 (1) ++
Регистрация: 03.12.2019
Подскажите, а как получить Enum текстовое описание C# которое ассоциировано в значением Enum в C# ?
Указал место в коде ниже.

Я так понял метод CLRInterop::getAnyTypeForObject просто тупо конвертирует значение Enum C# в текст не преобразуя его в строковое значение (как это происходит в C#)

X++:
System.IO.DriveInfo[]   allDrives_Net;
System.IO.DriveInfo     currDrive_Net;
Counter i;
Counter size;
str _str;

str strNet2str(System.String _str_Net)
{
	if (!CLRInterop::isNull(_str_Net))
		return CLRInterop::getAnyTypeForObject(_str_Net);
	return '';
}
;

allDrives_Net = System.IO.DriveInfo::GetDrives();
size = allDrives_Net.get_Length();

for (i = 0; i <= size - 1; i++)
{
	currDrive_Net = allDrives_Net.GetValue(i);

	print strFmt("Drive %1", strNet2str(currDrive_Net.get_Name()));
	print strFmt("  Drive type: %1", strNet2str(currDrive_Net.get_DriveType())); // вот тут будет возвращено строка в виде цифры а не текста Enum C#
}
pause;

Последний раз редактировалось oleggy; 07.06.2021 в 12:50.
Старый 07.06.2021, 13:04   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,307 / 1634 (61) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
попробуйте
Цитата:
currDrive_Net.get_DriveType().ToString()
Старый 08.06.2021, 05:57   #7  
oleggy is offline
oleggy
Участник
 
154 / 18 (1) ++
Регистрация: 03.12.2019
Подскажите как можно избежать такой конструкции проверки на True:

X++:
str strNet2str(System.String _str_Net)
{
        if (!CLRInterop::isNull(_str_Net))
            return CLRInterop::getAnyTypeForObject(_str_Net.ToString());
        return '';
}
...
if (strNet2str(currDrive_Net.get_IsReady()) == "True")
Не нашел метод.
Старый 08.06.2021, 06:13   #8  
Pandasama is offline
Pandasama
Участник
 
266 / 66 (3) ++++
Регистрация: 11.08.2014
Адрес: Барнаул
Метод .get_IsReady() должен возвращать логическое значение
https://docs.microsoft.com/ru-ru/dot...tframework-2.0
Почему вы с ним как со строкой работаете?
Старый 08.06.2021, 14:06   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,445 / 150 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
В 12-ке есть какой то WinApi::getDiskFreeSpace

Последний раз редактировалось Sada; 08.06.2021 в 14:08.
Старый 10.06.2021, 08:41   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
588 / 278 (11) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Sada Посмотреть сообщение
В 12-ке есть какой то WinApi::getDiskFreeSpace
В 4-ке тоже есть. Следовательно есть и в 2009.
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Освобождение места на виртуалке D365FO A_BAS DAX: Администрирование 14 16.01.2019 12:20
AX2009: "Места" модуля и что с ними делать Ivanhoe DAX: Программирование 31 24.02.2011 23:53
Физическое наличие. Где логика? r25 DAX: Функционал 5 07.12.2004 17:41
Как узнать значение фильтра пользователя? dd DAX: Программирование 2 11.10.2004 14:38
Можно ли узнать ширину колонки в Grid? Maxim Gorbunov DAX: Программирование 1 05.07.2002 18:52
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:29.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.