Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > ftp заливка информации


Автор: Legolas 28.1.2008, 23:25
Возникла проблема: есть какое-то количество файлов и папок на жестком диске, как их можно быстро залить на фтп, так чтобы вся иерархия папок сохранилась?  smile 

Автор: CYBERDREAM 29.1.2008, 09:03
Рекурсивно обходить все твои папки, создавая параллельно папки на фтп, с соответствующими адресами. Сейчас реализовываю синхронизацию данных. В качестве пункта назначения будет ФТП сервак, так что к концу недели смогу дать код.

А что именно смущает в этом вопросе? Как создавать иерархию папок подобную той, что на жестком? 

Автор: Legolas 29.1.2008, 18:38
CYBERDREAM, смущает то, что я не знаю как можно скопировать (перенести) файл на фтп... нашел примеры с байтовыми массивами и открытием потоков, но если так делать для каждого из файлов - нерационально... может есть способ как это сделать проще?

Автор: farad 30.1.2008, 14:16
Цитата(Legolas @  29.1.2008,  18:38 Найти цитируемый пост)
но если так делать для каждого из файлов - нерационально...

Разве существуют способы копирования файлов, работающие не пофайлово? 

Автор: tol05 30.1.2008, 14:43
а почему бы не загрузить пример с http://msdn2.microsoft.com/en-us/library/b7810t5c.aspx и не попробовать его?

Автор: CYBERDREAM 23.2.2008, 13:52
Не отработаны еще все exception'ы, но это уже сам сделаешь
Код



        FTPFactory ff = new FTPFactory(main);
        ff.setRemoteHost(task.Ftp.FtpAddress);
        ff.RemotePassword = task.Ftp.Password;
        ff.RemoteUser = task.Ftp.User;
        ff.login();

        private void UploadFolders(string source, string destination)
        {
            try
            {
                ff.chdir("\\");
                ff.chdir(destination);
                ff.mkdir(Path.GetFileName(source));
                
            }
            catch (Exception ex)
            {
                MessageBox.Show("An Error Has Occurred:\n" + ex.Message + "\n" + ex.StackTrace);
            }

                ff.chdir(Path.GetFileName(source));

            foreach (string fpath in Directory.GetFiles(source))
            {
                if (main.stop)
                    break;
                ff.upload(fpath);
            }
            foreach (string fsource in Directory.GetDirectories(source))
            {
                if (main.stop)
                    break;
                UploadFolders(fsource, destination + "\\" + Path.GetFileName(source));
            }

        }
        private void UploadFiles()
        {
            foreach (FileFolder file in task.Files)
            {
                if (File.Exists(file.Source))
                {
                    if (main.stop)
                        break;
                    ff.chdir("\\");
                    ff.chdir(file.Destination);
                    ff.upload(file.Source);
                }
            }
        }



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)