Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/89: Рейтинг темы: голосов - 89, средняя оценка - 4.55
 Аватар для artem0711
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90

Создание новой папки на FTP-сервере

03.10.2011, 14:54. Показов 17855. Ответов 12

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Нужно на C# сделать создание новой папки на FTP-сервере. На просторах инета нашёл много разных примеров, своял такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void createFolderFtp()
        {
            string ftphost = "192.168.8.4/system/";
            string ftpfullpath = "ftp://" + ftphost + Environment.MachineName;
            FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(ftpfullpath);
            ftp.Credentials = new NetworkCredential("login", "password");
            ftp.KeepAlive = false;
            ftp.UseBinary = true;
            ftp.UsePassive = false;
            ftp.Proxy = null;
            ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
            FtpWebResponse resp = (FtpWebResponse)ftp.GetResponse();
        }
Папочка создаётся, но почему-то под конец зависает и ругается ошибкой "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, не найден или к нему нет доступа).". У пользователя есть все права на данный FTP-ресурс. Кто подскажет, в чём проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2011, 14:54
Ответы с готовыми решениями:

Как просмотреть содержимое папки на FTP сервере
Всем доброго дня! Разобрался с подключением к FTP серверу. Подскажите 1) Как просмотреть содержимое папки на FTP сервере (для...

Команда для создания папки на FTP-сервере
на сервере имеется папка /public_html с помощью BAT команды нужно создать папку %username% (имя пользователя) уже скрипт готов, только...

Как найти папки на FTP-сервере из Oracle
Работаю на Oracle 11 с ftp-сервером с помощью пакета XUTL_FTP. Сейчас потребовалось найти не только список файлов, но и дочерние каталоги,...

12
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
03.10.2011, 14:59
Попробуйте закрывать респонс
C#
1
 resp.Close()
1
 Аватар для artem0711
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
03.10.2011, 15:17  [ТС]
Неа, на том же месте (FtpWebResponse resp = (FtpWebResponse)ftp.GetResponse() и та же ошибка %)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.10.2011, 15:39
Код вполне нормальный.
Если папка создается, то у пользователя есть права на создание - это хорошо.
А вот если попытаться повторно создать папку с тем же именем, то будет возвращаться ошибка 550 - файл не найден (или уже существует).
Потому перед созданием папки проверьте, может она там уже существует.
1
 Аватар для artem0711
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
04.10.2011, 09:22  [ТС]
kolorotur, а не подскажете как можно организовать эту проверку?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.10.2011, 11:21
Отправьте тот же запрос, только с методом WebRequestMethods.Ftp.ListDirectory;
Если вернет 550, значит папки не существует - можно создавать.
1
 Аватар для artem0711
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
04.10.2011, 13:38  [ТС]
Ура! Получилось что хотел ))))) Пример кода скинуть для последующих поколений?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.10.2011, 14:01
Цитата Сообщение от artem0711 Посмотреть сообщение
Пример кода скинуть для последующих поколений
Конечно.
0
15 / 12 / 4
Регистрация: 03.02.2011
Сообщений: 96
04.10.2011, 19:22
и гед код для последующих поколений?
0
 Аватар для artem0711
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
05.10.2011, 07:45  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Делал программульку для скриншотинга экрана с заливкой скрина на FTP

C#
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.IO;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            this.Opacity = 1;
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
        }
 
        private void checkFolderFtp(string ftpFolderPath)
        {
            string ftpHost = "192.168.8.4";
            string ftpFullPath = "ftp://" + ftpHost + ftpFolderPath;
            FtpWebRequest ftp;
            try
            {
                ftp = (FtpWebRequest)FtpWebRequest.Create(ftpFullPath);
                ftp.Credentials = new NetworkCredential("user", "password");
                ftp.KeepAlive = false;
                ftp.UseBinary = true;
                ftp.Proxy = null;
                ftp.Method = WebRequestMethods.Ftp.ListDirectory;
                FtpWebResponse resp = (FtpWebResponse)ftp.GetResponse();
                resp.Close();
            }
            catch
            {
                ftp = (FtpWebRequest)FtpWebRequest.Create(ftpFullPath);
                ftp.Credentials = new NetworkCredential("user", "password");
                ftp.KeepAlive = false;
                ftp.UseBinary = true;
                ftp.Proxy = null;
                ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
                FtpWebResponse resp = (FtpWebResponse)ftp.GetResponse();
                resp.Close();
            }
        }
 
        private void ftpfile(string ftpfilepath, string inputfilepath)
        {
            
            string ftphost = "192.168.8.4";
            string ftpfullpath = "ftp://" + ftphost + ftpfilepath;
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
            ftp.Credentials = new NetworkCredential("user", "password");
            ftp.KeepAlive = false;
            ftp.UseBinary = true;
            ftp.Proxy = null;
            ftp.Method = WebRequestMethods.Ftp.UploadFile;
            FileStream fs = File.OpenRead(inputfilepath);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            Stream ftpstream = ftp.GetRequestStream();
            ftpstream.Write(buffer, 0, buffer.Length);
            ftpstream.Close();
        }  
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics graphics = Graphics.FromImage(printscreen as Image);
            graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
            string filename = DateTime.Now.ToString("HH-mm-ss") + ".gif";
            printscreen.Save(@"C:\" + filename, System.Drawing.Imaging.ImageFormat.Gif);
            checkFolderFtp("/system/screens/" + Environment.MachineName + "/");
            checkFolderFtp("/system/screens/" + Environment.MachineName + "/" + DateTime.Today + "/");
            ftpfile(@"/system/screens/" + Environment.MachineName + "/" + DateTime.Today + "/" + filename, @"C:\" + filename);
            if (System.IO.File.Exists(@"C:\" + filename))
            {
                System.IO.File.Delete(@"C:\" + filename);
            }
            this.Close();
        }
    }
}
6
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.10.2011, 11:44
Лучший ответ Сообщение было отмечено как решение

Решение

Небольшой рефакторинг.
В частности, нет смысла сохранять скриншот на диске только для того, чтобы его тут же удалить.

C#
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
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            this.Opacity = 1;
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
        }
 
        private FtpWebRequest CreateFtpRequest(string path, string method)
        {
            var uri = new Uri("ftp://127.0.0.1/" + path);
            var ftp = FtpWebRequest.Create(uri) as FtpWebRequest;
            ftp.Credentials = new NetworkCredential("user", "password");
            ftp.KeepAlive = false;
            ftp.UseBinary = true;
            ftp.Proxy = null;
            ftp.Method = method;
            return ftp;
        }
 
        private bool FtpDirectoryExists(string path)
        {
            try {
                var ftp = CreateFtpRequest(path, WebRequestMethods.Ftp.ListDirectory);
                ftp.GetResponse().Close();
                return true;
            }
            catch (WebException exc) {
                var resp = exc.Response as FtpWebResponse;
                resp.Close();
                return resp.StatusCode != FtpStatusCode.ActionNotTakenFileUnavailable;
            }
        }
 
        private void CreateFtpDirectory(string path)
        {
            if (!FtpDirectoryExists(path))
                CreateFtpRequest(path, WebRequestMethods.Ftp.MakeDirectory).GetResponse();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            var printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            var graphics = Graphics.FromImage(printscreen as Image);
            graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
            var now = DateTime.Now;
            CreateFtpDirectory(string.Format("{0}/{1:yyyy-MM-dd}", Environment.MachineName, now.Date));
            var stream = CreateFtpRequest(string.Format("{0}/{1:yyyy-MM-dd}/{1:HH-mm-ss}.gif", Environment.MachineName, now), WebRequestMethods.Ftp.UploadFile).GetRequestStream();
            printscreen.Save(stream, ImageFormat.Gif);
            this.Close();
        }
    }
}
3
195 / 13 / 4
Регистрация: 26.04.2011
Сообщений: 137
02.12.2013, 08:19
Цитата Сообщение от kolorotur Посмотреть сообщение
Небольшой рефакторинг.
что-то оно
C#
1
2
3
4
5
private void CreateFtpDirectory(string path)
        {
            if (!FtpDirectoryExists(path))
                CreateFtpRequest(path, WebRequestMethods.Ftp.MakeDirectory).GetResponse();
        }
выдает: Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, не найден или к нему нет доступа).
0
Olegro
28.10.2014, 12:47
Столкнулся с такой ошибкой и не мог понять,в чем проблема,но в итоге разобрался.
Строка полного адреса файла или папки,которая передается в параметре,парсится на имя хоста и имена папок.Имена папок помещаются в массив строк.При подключении к FTP подразумевается,что текущей папкой нахождения является корневая директория и для перехода в конечную папку последовательно применяются команды перехода CWD для каждого имени папки в массиве.В моем случае при подключении к FTP сразу же осуществлялся переход в первую папку,а строка адреса парсилась по-прежнему,все имена папок после имени хоста заносились в массив.И,следовательно,производились попытки перехода в эти папки последовательно.Но в этом и заключалась проблема:были попытки перехода в папку,в которой уже находились и вылетала ошибка 550.Самое простое решение:убирать из строки полного пути имя этой папки.
На примере покажу,что происходило:
Путь ftp://ftp.aaa.com/111/222/333
При подключении подразумевается,что мы находимся по адресу ftp://ftp.aaa.com/
Далее идет вызов команд CWD 111 , CWD 222, CWD 333. И таким образом мы уже находимся по адресу ftp://ftp.aaa.com/111/222/333/ и там выполняем все нужные нам операции.
В моем случае при подключении первоначальным адресом был ftp://ftp.aaa.com/111/ . И далее шел вызов команды CWD 111.Ошибка,т.к. по данному адресу не находило такой папки,т.е. не существовало адреса ftp://ftp.aaa.com/111/111/ . Когда в качестве параметра передавал строку ftp://ftp.aaa.com/222/333/ , то все нормально срабатывало.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2014, 12:47
Помогаю со студенческими работами здесь

Получить список файлов из заданной папки на FTP-сервере
Программа должна: 1)Подключаться к заданному FTP-серверу с указанным логином и паролем (сделано) 2)Получать список файлов из...

Загрузка всех файлов из заданной папки на FTP-сервере
Всем привет! Короче проблема такова: я хочу скачать все файлы из конкретной папки на FTP в туже директорию где мы. Вот мой скрипт: ...

быстрое оповещение о появлении новой папки или файла на сервере
Для администратора необходимо быстрое оповещение об изменениях на сервере ( появлении новой папки или файла на сервере). Что посоветуете,...

Как сделать программу для проверки наличия папки на FTP сервере?
Здравствуйте. У меня есть вопрос. Как сделать программу для проверки наличия папки на FTP сервере? Заранее спасибо за ответ.

Создание файла на FTP - сервере
Здравствуйте.В FAQ нашёл пост о создании папки на FTP-сервере.Можно ли создать там же файл,например,текстовый(*.txt)?Если да то как.Заранее...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru