07.06.2021, 10:24 | #1 |
Участник
|
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(); 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 |
Участник
|
это статический метод
System.IO.DriveInfo::GetDrives() |
|
07.06.2021, 11:11 | #3 |
Участник
|
Не понял на счет статического метода. Я не смогу сохранить в какой либо экземпляр коллекцию дисков?
Напишите тогда как корректно вызвать? Последний раз редактировалось oleggy; 07.06.2021 в 11:18. |
|
07.06.2021, 11:37 | #4 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Pandasama (2), oleggy (1). |
07.06.2021, 12:47 | #5 |
Участник
|
Подскажите, а как получить 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 |
Участник
|
попробуйте
Цитата:
currDrive_Net.get_DriveType().ToString()
|
|
08.06.2021, 05:57 | #7 |
Участник
|
Подскажите как можно избежать такой конструкции проверки на 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 |
Участник
|
Метод .get_IsReady() должен возвращать логическое значение
https://docs.microsoft.com/ru-ru/dot...tframework-2.0 Почему вы с ним как со строкой работаете? |
|
08.06.2021, 14:06 | #9 |
Программатор
|
В 12-ке есть какой то WinApi::getDiskFreeSpace
Последний раз редактировалось Sada; 08.06.2021 в 14:08. |
|
10.06.2021, 08:41 | #10 |
Участник
|
В 4-ке тоже есть. Следовательно есть и в 2009.
__________________
// no comments |
|