Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70

Не работает копирование папок

18.03.2025, 08:52. Показов 1533. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь создать функцию, копирующую папки (в том числе вложенные) Не работает. В чем может быть проблема?
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Procedure DirCopy(SourceDir$, DestinationDir$)
    ; Проверяем, существует ли исходная папка
    If FileSize(SourceDir$) <> -2
        Debug "Ошибка: Исходная папка не существует!"
        ProcedureReturn #False
    EndIf
 
    ; Создаем целевую папку, если она не существует
    If FileSize(DestinationDir$) <> -2
        If Not CreateDirectory(DestinationDir$)
            Debug "Ошибка: Не удалось создать целевую папку!"
            ProcedureReturn #False
        EndIf
    EndIf
 
    ; Открываем исходную папку для чтения
    If ExamineDirectory(0, SourceDir$, "*.*")
        While NextDirectoryEntry(0)
            EntryName$ = DirectoryEntryName(0)
            EntryType = DirectoryEntryType(0)
 
            ; Пропускаем текущую и родительскую директории
            If EntryName$ = "." Or EntryName$ = ".."
                Continue
            EndIf
 
            ; Полный путь к текущему элементу
            SourcePath$ = SourceDir$ + "\" + EntryName$
            DestinationPath$ = DestinationDir$ + "\" + EntryName$
 
            ; Если это папка, рекурсивно копируем её
            If EntryType = #PB_DirectoryEntry_Directory
                If Not DirCopy(SourcePath$, DestinationPath$)
                    ProcedureReturn #False
                EndIf
            ; Если это файл, копируем его
            ElseIf EntryType = #PB_DirectoryEntry_File
                If Not CopyFile(SourcePath$, DestinationPath$)
                    Debug "Ошибка: Не удалось скопировать файл " + SourcePath$
                    ProcedureReturn #False
                EndIf
            EndIf
        Wend
        FinishDirectory(0)
    Else
        Debug "Ошибка: Не удалось открыть исходную папку!"
        ProcedureReturn #False
    EndIf
 
    ProcedureReturn #True
EndProcedure
 
; Пример использования
SourceFolder$ = "C:\Тест"
DestinationFolder$ = "C:\Тест 2"
 
If DirCopy(SourceFolder$, DestinationFolder$)
    Debug "Папка успешно скопирована!"
Else
    Debug "Ошибка при копировании папки!"
EndIf
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2025, 08:52
Ответы с готовыми решениями:

Создание папок и копирование файлов
Нужно создать папки по списку из столбца и скопировать в каждую папку файл с таким же именем (из общей папки) при наличии. Может кто-нибудь...

Работа с листами, а также копирование примечаний
Здравствуйте, замучился уже, толи тип у переменной неправильно выбрал толи еще чего Вообщем так. Первое: Начальные условия: у нас...

Работа со списками, сравнение, копирование
Задача: дано 4 списка данных в двух разных документах. 2 в одном (цена-товар), 2 в другом (тоже цена-товар). Один из списков цен -...

17
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 13:39
А почему бы не использовать CopyDirectory() с флагом #PB_FileSystem_Recursive?
На оф.сайте погугли функцию SHFileOperation_
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 15:55
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Procedure DirCopy(SourceDir$, DestinationDir$)
  ; Проверяем, существует ли исходная папка
  If FileSize(SourceDir$) <> -2
    Debug "Ошибка: Исходная папка не существует!"
    ProcedureReturn #False
  EndIf
  
  ; Создаем целевую папку, если она не существует
  If FileSize(DestinationDir$) <> -2
    If Not CreateDirectory(DestinationDir$)
      Debug "Ошибка: Не удалось создать целевую папку!"
      ProcedureReturn #False
    EndIf
  EndIf
  
  id = ExamineDirectory(#PB_Any, SourceDir$, "*.*")
  ; Открываем исходную папку для чтения
  If id
    While NextDirectoryEntry(id)
      EntryName$ = DirectoryEntryName(id)
      EntryType = DirectoryEntryType(id)
      
      ; Пропускаем текущую и родительскую директории
      If EntryName$ = "." Or EntryName$ = ".."
        Continue
      EndIf
      
      ; Полный путь к текущему элементу
      SourcePath$ = SourceDir$ + "\" + EntryName$
      DestinationPath$ = DestinationDir$ + "\" + EntryName$
      
      ; Если это папка, рекурсивно копируем её
      If EntryType = #PB_DirectoryEntry_Directory
        If Not DirCopy(SourcePath$, DestinationPath$)
          ProcedureReturn #False
        EndIf
        ; Если это файл, копируем его
      ElseIf EntryType = #PB_DirectoryEntry_File
        If Not CopyFile(SourcePath$, DestinationPath$)
          Debug "Ошибка: Не удалось скопировать файл " + SourcePath$
          ProcedureReturn #False
        EndIf
      EndIf
    Wend
    FinishDirectory(id)
  Else
    Debug "Ошибка: Не удалось открыть исходную папку!"
    ProcedureReturn #False
  EndIf
  
  ProcedureReturn #True
EndProcedure
 
; Пример использования
SourceFolder$ = "D:\Тест"
DestinationFolder$ = "D:\Тест 2"
 
If DirCopy(SourceFolder$, DestinationFolder$)
  Debug "Папка успешно скопирована!"
Else
  Debug "Ошибка при копировании папки!"
EndIf
0
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
18.03.2025, 16:23  [ТС]
locm,
Спасибо! Код работает, но при вложенности папок более двух - не получается

Добавлено через 2 минуты
AZJIO,
Почему то не срабатывает
Code
1
Debug CopyDirectory("С:\Тест", "С:\Temp\Тест2", "", #PB_FileSystem_Recursive)
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 17:22
Цитата Сообщение от winkot Посмотреть сообщение
Код работает, но при вложенности папок более двух - не получается
Нормально копирует.

Цитата Сообщение от winkot Посмотреть сообщение
Почему то не срабатывает
Для записи на диск C: нужны права администратора.
Проверьте на другом диске и запустите с правами админа.
Папка С:\Temp\ существует?
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 17:30
Цитата Сообщение от winkot Посмотреть сообщение
Почему то не срабатывает
У меня сработало... даже проверил указав несуществующий путь в папке %TEMP%, так он его создал, но не более одной папки, то есть указал %TEMP%\1 создалась папка 1, а указал %TEMP%\2\3, то две папки уже не создаются, убрал \3, осталось %TEMP%\2 опять создалось. Чтобы создать путь, если есть проблема генерации пути, то гугли функцию ForceDirectories(), она есть в доп. справке. Она сгенерирует путь рекурсивно проверяя существование каждой папки в пути и если не существует очередная папка то создаёт её, а в ней следующую и так до конца пока не создаст весь путь и тогда можно указывать путь в CopyDirectory(). Содержимое указанной папки Тест переместится внутрь Тест2, то есть папка Тест не появится внутри Тест2, а её содержимое.

%TEMP% это фигурально, я указал прямой путь, а не переменную. Переменная автоматом не раскрывается.
0
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
18.03.2025, 17:44  [ТС]
locm,
Code
1
2
3
; Пример использования
SourceFolder$ = "D:\Тест"
DestinationFolder$ = "D:\Temp\1"
получаю
Code
1
2
Папка успешно скопирована!
Папка успешно скопирована!
Далее
Code
1
2
3
; Пример использования
SourceFolder$ = "D:\Тест"
DestinationFolder$ = "D:\Temp\1\2\3"
получаю
Code
1
2
3
Папка успешно скопирована!
Ошибка: Не удалось создать целевую папку!
Ошибка при копировании папки!
По факту ничего не скопировано.
AZJIO,
Удивляет философия PureBasic. Даже такие элементарные, повседневные функции надо писать самому. Вместо того, что бы решать поставленную задачу надо, бросать ее и заниматься фактически доработкой языка. В том же AutoIt для этого достаточно одной команды DirCopy. Не понятно почему так сделано...
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 18:11
winkot, видимо потому что AutoIt3 интерпретируемый язык, функции которого выполняются скоростными функциями написанными на языке С++. Если на AutoIt3 убрать параметры и делать функции на скриптовом языке, то они будут медленные. В PureBasic наоборот нет смысла делать комбайн-фунцию потому что она будет медленней чем оптимизированная функция. Поэтому тут комбайн не нужен.

По факту если бы команда PureBasic создавала бы функции, то им бы пришлось их таскать от версии к версии. К примеру сейчас 3000 функций. Что было бы если бы их было 9000? При создании C-Backend им бы пришлось тащить за собой этот багаж. И ещё в 3 раза повышенное обслуживание багов. А ещё надо справку делать, а ещё надо компилятор и отладчик улучшать, а ещё надо IDE улучшать И всё это для 3-х ОС, если не больше. Это язык программирования и пусть люди пишут на нём свои функции, как UDF в AutoIt.

Функция Split в AutoIt3 работает медленнее.

В качестве примера я бы привёл FileRead() в AutoIt3, она просто отдаёт текст файла в переменную. В то время как в PureBasic запаришся писать её.

Я уже создавал список функций и предлагал Фреду как то создать некую отдельную справку для готовых функций, но как обычно это был временный ажиотаж. Я выложил пару десятков функций и всё опять заглохло. Тут люди пишут для бизнеса, и особо нет смысла для вас выкладывать что-то. У всех всё есть и всё работает. Если вы не можете этого найти-создать это ваши проблемы. А я уже выложил в доп. справке все нужные функции, а в свой плаг-инструмент автозавершения я добавил популярные примеры и просто пишу "чтен" вызываю хоткей и вставляется функция чтения файла, так что проблема повторюсь только у вас.

А не проще ли скачать мои проги и просто потырить все функционалы? Там где есть открытия файла, посмотреть как открываются, а прогах где идёт перебор файлов по маске просто взять готовое и использовать. Где чтение ini, также брать готовое. Всё уже есть и повторяется в каждой проге. Тот же ForceDirectories(). К примеру прога синхронизатор или поиск дубликатов, ну явно там есть функции перебора файлов.
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 18:33
Функция CopyDirectory() копирует папку, а не создает не существующие в пути к ней. По моему это логично.
Что мешает перед копированием вызвать FileSize() и убедится что папка назначения есть на диске. А если нет, ее несложно создать. https://www.purebasic.fr/engli... hp?t=68073
https://www.purebasic.fr/engli... php?t=5265

Цитата Сообщение от AZJIO Посмотреть сообщение
В качестве примера я бы привёл FileRead() в AutoIt3, она просто отдаёт текст файла в переменную. В то время как в PureBasic запаришся писать её.
Эта? https://autoit-script.ru/docs/... leread.htm
Она просто читает данные из файла. Аналог ReadData()
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 18:40
Цитата Сообщение от locm Посмотреть сообщение
Аналог ReadData()
Далеко неодинаково. ReadData() даёт указатель на память. Ещё надо проверить формат, проверить до конца ли прошло чтение, прочитать из памяти в переменную. А AutoIt3 функция просто даёт строку переменную. При чём для файла это идеально, так как переменная в AutoIt3 может содержать Null символ, и строковые функции не запнутся о него, то есть можно в бинарнике сделать замену текста без учёта регистра. В PureBasic надо гуглить бинарные функции о они только с учётом регистра. В этом плане у AutoIt3 есть преимущество. Если бы Фред добавил тип строк не по нультерминированной строке, а по длине, ну тогда бы пришлось целый раздел строковых функций писать для такого типа. Но это сразу бы упростило много задач.
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 18:52
В каждом ЯП свои особенности реализации. Например в AutoIt нет аналогов IncludeBinary, Import, Prototype и др. Типов переменных тоже нет.

Если нужно прочитать только текст, то можно воспользоваться функцией ReadString() с флагом #PB_File_IgnoreEOL.
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 19:23
Цитата Сообщение от locm Посмотреть сообщение
IncludeBinary
FileInstall, хотя это лишь частью похожий.
Цитата Сообщение от locm Посмотреть сообщение
в AutoIt нет аналогов
Если Фред говорил, что позиционирует для новичков, если он хочет увеличить бизнес, то ему выгодно привлекать новичков. А значит у него должен быть легкий входной порог, то есть новичок должен сразу получить функции-блоки для построения простых программ "чтение файла", "чтение настроек". А уж потом выяснив, что чтение файла не такое уж оптимизированное, то можно его переписать. Но функции начального уровня должны быть. По факту PureBasic в этом плане должен быть не хуже AutoIt3, у которого этот порог минимальный (в том числе за счёт отсутствия типов).
Пусть создаст в справке аналог UDF в AutoIt3, то есть раздел для пользовательских функций. Что мешает создать там штук 50 строковых функций, штук 50 файловых функций, те же поиск файлов по маске. Тем более можно оценить запросы пользователей по их частоте.
Фред вроде бы делает справку кроссплатформенной, но по факту проще CHM открыть в Linux, чем пользоваться тем что есть. Тогда уж лучше качественный CHM сделать со стилями. Я так понимаю отсутствие стиля связано с тем что справка в Linux не будет работать, а писать индивидуально под Windows и по Linux автор не хочет, вот и выходит что мы только своими силами можем что-то сделать.
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 20:00
Цитата Сообщение от AZJIO Посмотреть сообщение
FileInstall, хотя это лишь частью похожий.
Разве данные не извлекаются во временную папку? То есть их нужно после из файлов загружать. Запись на диск тратит его ресурс и при вылете приложения файлы останутся на диске.
Цитата Сообщение от AZJIO Посмотреть сообщение
(в том числе за счёт отсутствия типов
Это не достоинство, а недостаток.
Смотря на переменную не знаешь что в ней. Отладчика нет и остается изучать остальной код. Бывают ошибки из-за того что в переменной строковые данные, а не числовые и результат будет совсем не таким как предполагаешь. А о том что данные строковые можно только догадываться.
Code
1
2
3
4
5
6
$v1 = '180'
$v2 = '2'
 
if $v1 > $v2 Then
    MsgBox(0,"","$v1 > $v2")
endif
Типы должны быть обязательно иначе по всему коду расставлены грабли, найти которые не всегда просто, в первую очередь новичкам.
Особенно забавно когда скрипт вылетает сообщая что массив вовсе не массив и приходится пройтись по всем вызовам функции и искать где косяк. Это отнимает много времени которое можно было бы потратить на что-то другое.
А еще можно случайно забыть что массив объявлен двумерным и получить такую ошибку.
Code
1
2
3
4
5
Dim $array[4][4]
 
ReDim $array[Ubound($array, 1)+1]
 
ConsoleWrite($array[0][0] & @CRLF)
AutoIt вовсе не возражает против того что массив из двумерного стал одномерным и ругается при доступе к нему. Новичок не сразу поймет в чем дело.
И таких граблей очень много.
1
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
18.03.2025, 20:35
Цитата Сообщение от locm Посмотреть сообщение
Типы должны быть
На счёт типов есть нюансы и я в справке расписал более подробно поведение. Тип легко узнать просто посмотрев какая функция его возвратила, если строковая, то явно там строка.
Цитата Сообщение от locm Посмотреть сообщение
массив из двумерного стал одномерным
так это ж фича? Если привыкнуть что такое нельзя то да, кажется абсурдом, а если я всегда знал что именно так и происходит, то абсурдом кажется иное поведение.

Я про то, что начальный порог написания прог у AutoIt3 ниже. Я начал писать проги, когда увидел функцию создания ярлыка. Я считал что ярлык какой-то бинарный файл и создать его может только система, а тут автор LiveCD NIKZZZZ создаёт ярлык вполне понятной функцией, где просто перечисляются путь, название, аргументы. Меня сразу заинтересовало и я стал кликать все примеры и все они делали что-то интересное и я сразу стал искать где это применить. В PureBasic нет сразу готовых функций заточенных под популярные задачи, вернее есть но меньше. Той же функции создания ярлыка нет. Вот поэтому я и хочу чтобы Фред сделал раздел для популярных функций для привлечения народа.
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
18.03.2025, 22:19
Цитата Сообщение от AZJIO Посмотреть сообщение
так это ж фича?
Насколько часто нужна?
От нее больше проблем чем пользы.

Цитата Сообщение от AZJIO Посмотреть сообщение
Если привыкнуть что такое нельзя то да, кажется абсурдом
Нет не абсурд - потенциальные грабли! Найти такую ошибку не всегда можно быстро.

Цитата Сообщение от AZJIO Посмотреть сообщение
Я про то, что начальный порог написания прог у AutoIt3 ниже.
Не соглашусь. У Autoit немного собственных функций. Все остальное в UDF, а это необходимость подключать файлы что увеличивает порог, т. к. новичку не известно что и где находится.
GUI очень простой, а WinAPI использовать сложнее.
1
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
19.03.2025, 01:59
Цитата Сообщение от locm Посмотреть сообщение
а WinAPI использовать сложнее
Самое слабое место AutoIt3 это структуры. Во первых они в одну строку чередованием параметров тип-значение. Во вторых типы там практически надо изучать C++. Сразу требуется указатели, то есть практически знание языка Си, работа с памятью, только жутким методом. Только после PureBasic я познал радость структур.
0
Эксперт по электронике
6803 / 3230 / 335
Регистрация: 28.10.2011
Сообщений: 12,613
Записей в блоге: 7
19.03.2025, 02:47
Цитата Сообщение от AZJIO Посмотреть сообщение
Самое слабое место AutoIt3 это структуры.
Да, соглашусь с этим. По началу пытался создать массив структур и ничего не получилось. Двумерный массив с магическими числами в индексах не подходит - сложно провести ассоциацию между числом и данными по индексу. Имя поля структуры гораздо информативнее.
Неужели никто не писал об этом разработчикам AutoIt?
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
29.03.2025, 10:25
есть функция PathRemoveFileSpec_() она позволяет порезать путь на запчасти
потом проверяешь наличие очередной папки и если папки нет, создаёшь
ещё есть
PathIsDirectory() - проверяет папка это или нет
PathIsDirectoryEmpty_() - проверяет папка это или нет, пустая папка или нет
пустая папка, это папка в которой вообще ни чего нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2025, 10:25
Помогаю со студенческими работами здесь

Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами)
Всем привет, подскажите каким образом можно из VBA сохранить документ txt в папке &quot;Общие документы&quot; и задать для него свойство...

Не работает копирование листа (sheets(1).copy before:=sheets(1))
выручайте!!! не работает копирование листа (sheets(1).copy before:=sheets(1)). при этом всем макрос не выдает ошибку а просто заканчивает...

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False UserForm1.Image48.Visible = False Location = &quot;T:\Rik\PS\ЛПА\Выдача...

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False UserForm1.Image48.Visible = False Location = &quot;T:\Rik\PS\ЛПА\Выдача...

Не работает копирование и перемещение столбцов
Пытаюсь сделать так, но не работаетSub DeleteRow_Example4() Range(&quot;A1:AL4&quot;).EntireRow.Delete Range(&quot;C:C,H:H&quot;).Select ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru