копирование директории
От: Sorantis Швеция  
Дата: 07.07.05 10:34
Оценка: 3 (1)
Всем привет!
Кто-нибудь может сказать как копировать диреткорию со всем ее содержимым?
public void CopyFolder(System.String path)
{
DirectoryInfo di = new DirectoryInfo(m_Dirname);
FileSystemInfo [] dirs = di.GetFileSystemInfos();
DirectoryInfo newdi = new DirectoryInfo(path);



}

а вот как дальше делать не подскажете?
As long as there is life, there is hope
копирование директории
От: Аноним  
Дата: 07.07.05 10:49
Оценка:
Есть два варианта:
1. Надо рекурсивно обходить директории и копировать файлы поштучно.
2. Подключить COM — библиотеку Microsoft Scripting Runtime и использовать:

Scripting.FileSystemObjectClass file_system_object = new Scripting.FileSystemObjectClass();
Scripting.Folder folder = file_system_object.GetFolder(source_folder_name);
folder.Copy(destination_folder_name);
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: копирование директории
От: Sorantis Швеция  
Дата: 07.07.05 14:38
Оценка: 3 (1)
Здравствуйте, Virus Quartirus, Вы писали:

VQ>Есть два варианта:

VQ>1. Надо рекурсивно обходить директории и копировать файлы поштучно.
VQ>2. Подключить COM — библиотеку Microsoft Scripting Runtime и использовать:

VQ>Scripting.FileSystemObjectClass file_system_object = new Scripting.FileSystemObjectClass();

VQ>Scripting.Folder folder = file_system_object.GetFolder(source_folder_name);
VQ>folder.Copy(destination_folder_name);


Вот пример с рекурсией

public void CopyFolder(string src,string dist)
        {
            if(!Directory.Exists(dist))
                Directory.CreateDirectory(dist);

            FileInfo file;
            DirectoryInfo dir;
            string[] strFiles;
            string[] strDirs;

            //Copy all files...
            strFiles = Directory.GetFiles(m_Dirname);
            foreach (string strFile in strFiles)
            {
                file = new FileInfo(strFile);
                file.CopyTo(dist+"\\"+file.Name);
            }
    
            //Copy child directories...
            strDirs = Directory.GetDirectories(src);
            foreach (string strDir in strDirs)
            {
                dir = new DirectoryInfo(strDir);
                if(dir.FullName == dist)//check to prevent infinite loop if the destination is under the source folder..
                    continue;
                CopyFolder(dir.FullName,dist+"\\"+dir.Name);
            }
        }
As long as there is life, there is hope
Re[2]: копирование директории
От: _Mihail Россия  
Дата: 16.11.07 13:16
Оценка:
Здравствуйте, Sorantis, Вы писали:

Какой ужас, блин не могли функцию копирования директории сделать
Re[3]: копирование директории
От: _Mihail Россия  
Дата: 16.11.07 16:33
Оценка: 1 (1)
Здравствуйте, _Mihail, Вы писали:

_M>Какой ужас, блин не могли функцию копирования директории сделать


В VS 2005 правда появилось My.Computer.FileSystem.CopyDirectory()
Re: на VB.NET без рекурсии
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 17.11.07 10:40
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>Кто-нибудь может сказать как копировать диреткорию со всем ее содержимым?


S>а вот как дальше делать не подскажете?


Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.

Писано на VB.NET для .NET 1.1, проверено — работает:

    Private Sub CopyFolder(ByVal SourceDirName As String, ByVal DestDirName As String)
        Dim Folders As New ArrayList

        'поместить целевой каталог в очередь для обработки
        Folders.Add(New FolderPair(SourceDirName, DestDirName))

        Do While True
            'выйти, если больше нет каталогов для обработки
            If Folders.Count = 0 Then Exit Do

            'взять каталог для обработки
            Dim pair As FolderPair = CType(Folders(0), FolderPair)
            Folders.RemoveAt(0)

            'создать каталог
            Directory.CreateDirectory(pair.DestFolder)

            'скопировать файлы
            Dim FileName, sDest As String, okSkipFile As Boolean
            For Each FileName In Directory.GetFiles(pair.SrcFolder)
                sDest = Path.Combine(pair.DestFolder, Path.GetFileName(FileName))
                okSkipFile = False
                If File.Exists(sDest) Then
                    If Not Alert.YesNo(Me, "Файл уже существует:" & vbCrLf & vbCrLf & sDest & vbCrLf & vbCrLf & "Заменить его?") Then _
                        okSkipFile = True
                End If
                If Not okSkipFile Then
                    File.Copy(FileName, sDest, True)
                End If
            Next

            'поместить подкаталоги в очередь на обработку
            Dim FolderName As String
            For Each FolderName In Directory.GetDirectories(pair.SrcFolder)
                Folders.Add(New FolderPair(FolderName, Path.Combine(pair.DestFolder, Path.GetFileName(FolderName))))
            Next
        Loop
    End Sub

    Private Class FolderPair
        Friend SrcFolder As String
        Friend DestFolder As String

        Sub New(ByVal SrcFolder As String, ByVal DestFolder As String)
            Me.SrcFolder = SrcFolder
            Me.DestFolder = DestFolder
        End Sub
    End Class
Re[2]: на VB.NET без рекурсии
От: _d_m_  
Дата: 18.11.07 03:41
Оценка: -1
Здравствуйте, nzeemin, Вы писали:

N>Здравствуйте, Sorantis, Вы писали:


S>>Кто-нибудь может сказать как копировать диреткорию со всем ее содержимым?


S>>а вот как дальше делать не подскажете?


N>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.


А зачем?
Re[3]: на VB.NET без рекурсии
От: Аноним  
Дата: 18.11.07 03:59
Оценка:
N>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.
___>А зачем?
Разные способы обхода графа есть все-таки...
Re[4]: на VB.NET без рекурсии
От: _d_m_  
Дата: 18.11.07 23:32
Оценка: :)
Здравствуйте, Аноним, Вы писали:

N>>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.

___>>А зачем?
А>Разные способы обхода графа есть все-таки...

Разные способы есть. Конечно, штаны можно через ноги одевать, а можно через голову — но зачем?
Re[3]: на VB.NET без рекурсии
От: Ватакуси Россия  
Дата: 19.11.07 11:43
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, nzeemin, Вы писали:


N>>Здравствуйте, Sorantis, Вы писали:


S>>>Кто-нибудь может сказать как копировать диреткорию со всем ее содержимым?


S>>>а вот как дальше делать не подскажете?


N>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.


___>А зачем?


Ресурсы берегуться.
Все будет Украина!
Re[4]: на VB.NET без рекурсии
От: _d_m_  
Дата: 20.11.07 02:14
Оценка:
Здравствуйте, Ватакуси, Вы писали:

N>>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.


___>>А зачем?


В>Ресурсы берегуться.


И много сберегается?
Re[5]: на VB.NET без рекурсии
От: Ватакуси Россия  
Дата: 20.11.07 15:23
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, Ватакуси, Вы писали:


N>>>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.


___>>>А зачем?


В>>Ресурсы берегуться.


___> И много сберегается?


Ну, скажем на 1000 уровней вниз, твоя рекурсия раскрутится? Стек выдержит?
Все будет Украина!
Re[6]: на VB.NET без рекурсии
От: Othello  
Дата: 20.11.07 15:50
Оценка:
В>Ну, скажем на 1000 уровней вниз, твоя рекурсия раскрутится? Стек выдержит?

пусть у вас каждый вызов занимает в стеке 1 Кб (не знаю правда что вы там будете на килобайт хранить) — итого получается нужен стек размером 1 МБ — выглядит вполне реально.

а вот что вы будете хранить в такой структуре директорий ? да и как их создавать ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: на VB.NET без рекурсии
От: _d_m_  
Дата: 21.11.07 02:24
Оценка:
Здравствуйте, Ватакуси, Вы писали:

N>>>>>Тут ответах приводили пример с рекурсией. Можно то же самое без рекурсии, с использованием динамического массива для списка необработанных папок.


___>>>>А зачем?


В>>>Ресурсы берегуться.


___>> И много сберегается?


В>Ну, скажем на 1000 уровней вниз, твоя рекурсия раскрутится? Стек выдержит?


Во первых, не моя, а общая. Во вторых, стек выдержит (надо использовать крепкий, качественный стек ). В третьих, к примеру, если мне надо записать пару слов на бумаге я использую шариковую ручку, а не типографский станок.
Re[6]: на VB.NET без рекурсии
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.11.07 13:04
Оценка: -1
Здравствуйте, Ватакуси, Вы писали:
В>Ну, скажем на 1000 уровней вниз, твоя рекурсия раскрутится? Стек выдержит?
А ты сам не в силах оценить размер фрейма стека для функции копирования директории?
По моим прикидкам, он влазит в 32 байта. Для превышения дефолтного размера стека нужно обеспечить глубину рекурсии в ~32000.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: на VB.NET без рекурсии
От: Ватакуси Россия  
Дата: 28.11.07 14:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Ватакуси, Вы писали:

В>>Ну, скажем на 1000 уровней вниз, твоя рекурсия раскрутится? Стек выдержит?
S>А ты сам не в силах оценить размер фрейма стека для функции копирования директории?
S>По моим прикидкам, он влазит в 32 байта. Для превышения дефолтного размера стека нужно обеспечить глубину рекурсии в ~32000.

А что все в мире ограничивается примитивами? А если там с учетом прав NTSF (+ проверка на соответсвие полноты и непротиворечивости оных) нужно копировать, с дополнительной фильтрацией и т.п.? Боюсь даже в 64 байта не влезет :D
Все будет Украина!
Re[8]: на VB.NET без рекурсии
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.11.07 15:27
Оценка:
Здравствуйте, Ватакуси, Вы писали:
В>А что все в мире ограничивается примитивами? А если там с учетом прав NTSF (+ проверка на соответсвие полноты и непротиворечивости оных) нужно копировать, с дополнительной фильтрацией и т.п.? Боюсь даже в 64 байта не влезет :D
А ты померь. Даже если ты сумеешь наколбасить стек фрейм размером в 64 байта (проверкой прав на NTFS тут не обойдешься), то все равно потребуется глубина в 16000. У тебя часто встречаются такие структуры файлухи?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: на VB.NET без рекурсии
От: Epodrez Украина  
Дата: 07.02.08 11:51
Оценка: :)
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=12786&amp;SiteID=1
Может у кого есть готовый пример не подпадающий под такое ограничение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.