Стою на асфальте, или копирование папки...

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Стою на асфальте, или копирование папки...

Сообщение Tarik » 15.05.2005 (Вс) 20:47

Сегодня мне по ходу написания проги понадобилось скопировать одну папку (программно, ессьно). Лазил по нэймспейсу IO, по MSDN, но так и не нашёл нужной функции :( . Перемещение - пожлуйста, а вот копирование...
И, что самое интересное, в разделе по DirectoryInfo есть линк на пример, якобы содержащий нужное мне "Copy a directory". Идём по линку, попадаем на описания класса Directory. Листаем к примерам и видим код. После минуты вдумчивого чтения понимаем, что нас жестоко нае... обманули, ибо никакого копирования там нету. Написать свою ф-цию, конечно, было делом пяти минут, однако это заставило меня задуматься над весьма самоуверенной фразой мелкомягких о том, что Framework предоставляет ВСЁ, что только может потребоваться программисту...

З.Ы. Может я, конечно, ещё не очень хорошо ориентируюсь в .NET, и функция копирования папки всё же имеет место быть. Что ж, тогда прошу меня не пинать и ткнуть носом в субж :wink:

З.З.Ы. Ещё сегодня искал наименее геморный способ перенести в новый битмап участок исходного битмапа - тоже не нашёл. За неимением времени пришлость писать ф-цию, тупо делающую GetPixel/SetPixel :cry:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 15.05.2005 (Вс) 21:52

В в 2005,в злополученном Namespace ME есть FileSystem.CopyDirectory
которым (МЕ) я б реомендовал пользоваться исключительно, в последней инстанции. Проще декомпильнуть метод и самому написать, используя "нормальные" классы из Классического Фреймворка

ИЛи WMI ))...

Ну, а если ты немного знаком с рекурсией, то такой метот пишется из 10 строк)))

копифолдер( соурс, дест)

для каждой субсоурпапки -> копифолдер сабсоурс, субдест

для каждого фаула -> копифалй

все! end Sub
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2005 (Пн) 5:05

Ну вот, это произошло опять...

Sebas, вот ты, как знаток .NET, скажи мне, что это за лажа? Почему нельзя определить, закрылся ли сокет? Почему не ловятся события COM через Interop? Почему сам Эпплман вынужден использовать BitBlt для копирования графики? Почему нельзя определить кто закрыл форму - юзер или система? Почему нет простейшей функции копирования папок?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 16.05.2005 (Пн) 6:26

GSerg

Думаю, эти вопросы нужно сам знаешь кого, спрашивать 8)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 16.05.2005 (Пн) 8:27

GSerg писал(а):Ну вот, это произошло опять...

Sebas, вот ты, как знаток .NET, скажи мне, что это за лажа? Почему нельзя определить, закрылся ли сокет? Почему не ловятся события COM через Interop? Почему сам Эпплман вынужден использовать BitBlt для копирования графики? Почему нельзя определить кто закрыл форму - юзер или система? Почему нет простейшей функции копирования папок?


-Ты имеешь ввиду, когда клиент оффициально отсоединяется?
-Работает (должно быть 2 файла интеропа). Причём даже не в контексте вызова передаётся в ВЫЗЫВАЮЩУЮ библиотеку, в отличии от VB6!
-Графику использовал только на уровне перерисовки контрола TreeListView. Поковыряйся в IssueVision.
-Ну в 2005 же добавили, давай закроем эту тему.
-в 2005 есть.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2005 (Пн) 9:45

- Посмотри вопросы Тёмыча. При соединении не через локальную сеть нельзя поймать момент разрыва соединения.
- Посмотри мою тему "HTML Object Library: отлов событий" в этом разделе.
- А вот Эпплман говорит, что ничем, кроме фантастического просчёта разработчиков, этот факт объяснить нельзя.
- А мне вот кажется, что такая стратегия добавления фич придумана специально для более лёгкого подсаживания.
- Аналогично.

Я не против .NET. Я одобряю изменения в самом языке. Я хочу ошибаться в отношении .NET. Но пока всё убеждает меня, что я не ошибаюсь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 16.05.2005 (Пн) 9:55

Sebas писал(а):Ну, а если ты немного знаком с рекурсией, то такой метот пишется из 10 строк)))

копифолдер( соурс, дест)

для каждой субсоурпапки -> копифолдер сабсоурс, субдест

для каждого фаула -> копифалй

все! end Sub

Вот именно так вчера и пришлось написать:
Код: Выделить всё
        Public Sub CopyFolder(ByVal Source As String, ByVal Destination As String)
            Dim fs As New DirectoryInfo(Source)
            Dim fd As New DirectoryInfo(Destination)
            Dim fdir As DirectoryInfo
            Dim ffile As FileInfo

            If fd.Exists = False Then fd.Create()
            For Each ffile In fs.GetFiles
                ffile.CopyTo(fd.ToString & "" & ffile.Name, True)
            Next
            For Each fdir In fs.GetDirectories
                CopyFolder(fdir.FullName, fd.FullName & "" & fdir.Name)
            Next
        End Sub


GSerg писал(а):Почему нельзя определить, закрылся ли сокет? Почему не ловятся события COM через Interop? Почему сам Эпплман вынужден использовать BitBlt для копирования графики? Почему нельзя определить кто закрыл форму - юзер или система? Почему нет простейшей функции копирования папок?

Контролы, контролы прозрачные ещё! :D

З.Ы. Кстати, а что со второй проблемой делать, никто не знает? Напомню: надо перенести в новый битмап произвольный участок исходного битмапа (участок определяет RectangleF). Ведь ж... печёнкой чую, что Get(Set)Pixel это уж слишком :wink:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2005 (Пн) 10:10

Эпплман объявлял BitBlt :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 16.05.2005 (Пн) 10:18

GSerg писал(а):Эпплман объявлял BitBlt :)

Мда... Ладно, оставлю пока свой вариант, благо нужно обрабатывать изображения максимум 100х100 :roll:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 16.05.2005 (Пн) 12:52

GSerg писал(а): Посмотри мою тему "HTML Object Library: отлов событий" в этом .



Я ж говорю, события работали (у меня) только когда имеем прокси с событием вида Event(Sender,arg).
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.05.2005 (Пн) 15:52

Tarik писал(а):З.Ы. Кстати, а что со второй проблемой делать, никто не знает? Напомню: надо перенести в новый битмап произвольный участок исходного битмапа (участок определяет RectangleF).

Что-нибудь навроде Graphics.FromImage(Bitmap1).DrawImage(Bitmap2,YourRect), да?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2005 (Пн) 17:03

А где координаты исходного подпрямоугольника? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.05.2005 (Пн) 20:52

Ну тогда Graphics.FromImage(Bitmap1).DrawImage(Bitmap2, DestRect, SrcRect, GraphicsUnit.Pixel)
Изображение

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 17.05.2005 (Вт) 13:22

А мне бы больше хотелось ещё один вариант конструктора
dim bmp1 as new bitmap(srcbmp, srcRect)
:roll:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2005 (Вт) 18:48

Tarik, когда будешь писать свой FW - вставишь в него любые конструкторы, какие захочешь ;-)

Чем тебя не устраивает предложенный вариант?
Изображение

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 17.05.2005 (Вт) 21:08

Уж прям и помечтать нельзя :) Где-то там была ветка "Что бы вы хотели видеть в FW2?"... :wink:

А приведённый вариант вполне устраивает, будет время - перепишу под него свою ф-цию (сейчас уже запара - сессия близко :x ).

А вообще, было бы неплохо сделать нэймспейс для необременительного применения функций типа CopyFolder и т. д... Помнится, была уже такая тема, но я тогда про .NET только узнал, потому и не следил...

З.Ы. Уже >1000 мессаг, а я и не заметил :)
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49

    TopList