С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
1

Не верная кодировка при отправке файла на FTP

24.01.2012, 13:34. Показов 4074. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день уважаемые гуру! Целый день бьюсь над задачкой, софтинка по отправке файла на 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
string[] g = File.ReadAllLines("config.pronto");
                progressBar1.Maximum = 10;
                progressBar1.Value = 1;
                label1.Text = "Подождите...";
                string a = (g[5]);
                string B = (urlTextBox.Text);
               
              
                
 
                string c = (a + B + ".zip");
                string ftpfile;
                
                ftpfile = (".zip" + a + B + ".zip");
                
                
                string inputfilepath = c;
                string ftpfilepath = (B + ".zip");
               
                
 
                try
                {
                    string ftpfullpath = ("ftp://" + g[1] + ftpfilepath);
                                     
                                                                            label1.Text = "Соединение с FTP сервером";
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
                    ftp.Credentials = new NetworkCredential("ЛОГИН ", "ПАРОЛЬ");
                    progressBar1.Value = 3;
                    ftp.KeepAlive = true;
                    ftp.UseBinary = true;
                    ftp.Proxy = null;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;
                    FileStream fs = File.OpenRead(inputfilepath);
                    label1.Text = "Начата отправка файла";
                    progressBar1.Value = 5;
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    label1.Text = "Начата отправка файла";
                    fs.Close();
                    Stream ftpstream = ftp.GetRequestStream();
                    progressBar1.Value = 7;
                    ftpstream.Write(buffer, 0, buffer.Length);
                    ftpstream.Close();
                    progressBar1.Value = 9;
                    label1.Text = "Начата отправка файла";
Но вот такая незадача...файл который заливается на FTP,имеет не читаемое имя.
Положим если файл называется - Саратов-24.01.2012.zip, то на FTP его название будет - Саратов-24.01.2012.zip
Я побывала изменять кодировку перед отправкой файла :
C#
1
2
3
System.Text.Encoding utf_8 = System.Text.Encoding.ASCII;
                byte[] utf8Bytes = System.Text.Encoding.ASCII.GetBytes(ftpfilepath);
                ftpfilepath = System.Text.Encoding.ASCII.GetString(utf8Bytes);
Но все тщетно, вместо "коркозяб", знаки вопроса. Уважаемые гуру! Подскажите, в какую сторону смотреть
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
24.01.2012, 13:34
Ответы с готовыми решениями:

Кодировка при отправке файла на email
И так, не получается сделать Русскую кодировку отправленного файла, получаются крякозябры - (скрин)...

Неверная кодировка при отправке данных на сайт
Вообщем целый день угрохал на то чтобы найти почему на сайт отправляет не ту кодировку которую мн...

Не верная кодировка в БД, при добавлении вместо символов ?
Работаю с ASP, использую библиотеку MySQL. При попытке установить значение на русском языке вместо...

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

5
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
24.01.2012, 13:59 2
C#
1
Encoding.UTF8.GetString(Encoding.Default.GetBytes("Саратов-24.01.2012.zip"))
А вообще при считывании надо нормальную кодировку указывать.
1
3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
24.01.2012, 16:13  [ТС] 3
Вы меня не много не поняли)
Необходимо что бы файл на FTP попадал в читаемой кодировке, если в () у GetBytes ставить переменную значением которой является имя файла, увы такие же коркозябы.
Причем в самой форме символы читаемы.
вообще при считывании надо нормальную кодировку указывать.
А можно поподробнее, пожалуйста ?
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
24.01.2012, 19:59 4
Kseniya_sar, мне вот интересно, вы пишите полсотни строчек и потом пытаетесь их запустить? Конечно так ничего работать не будет. Код мало того, что показан не полностью, так еще и безобразно.

Цитата Сообщение от Kseniya_sar Посмотреть сообщение
если в () у GetBytes ставить переменную значением которой является имя файла
А зачем менять кодировку имени файла, если надо поменять кодировку содержимого?
Прежде всего надо определится в какой кодировке хранятся данные. Как в примере выше, я с этим не мучился и считал в Default. После конвертанул в UTF8.
Цитата Сообщение от Kseniya_sar Посмотреть сообщение
System.Text.Encoding utf_8 = System.Text.Encoding.ASCII;
Это почему переменная называется utf_8, а присваивается ей значение ASCII? Кого вы пытаетесь обмануть? Да и какой вообще смысл ее, если она не используется?
В общем исходя из этих строк:
C#
1
2
byte[] utf8Bytes = System.Text.Encoding.ASCII.GetBytes(ftpfilepath);
ftpfilepath = System.Text.Encoding.ASCII.GetString(utf8Bytes);
Заменить на:
C#
1
string fileString = System.Text.Encoding.UTF8.GetString(buffer);
И сохранить эту строку в файл, а не массив байтов.
C#
1
2
if (!File.Exists(path))
        File.WriteAllText(path, fileString);
Или здесь вы чего-то не договариваете.

Не по теме:

По-поводу безобразия:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                string a = (g[5]);
                string B = (urlTextBox.Text);
               
              
                
 
                string c = (a + B + ".zip");
                string ftpfile;
                
                ftpfile = (".zip" + a + B + ".zip");
                
                
                string inputfilepath = c;
                string ftpfilepath = (B + ".zip");
               
                
 
                try
                {
                    string ftpfullpath = ("ftp://" + g[1] + ftpfilepath);
Да, это говно-код, и жутко усложняет понимание происходящего. a, B, c, 5, 1 - что за магические значения? Сегодня вы знаете, что они означают, через день забудете и не вспомните. Я уже молчу о том, что здесь фигурирует обилие временных переменных, которые от силы, уверен, используются один раз.

1
3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
25.01.2012, 10:31  [ТС] 5
Kseniya_sar, мне вот интересно, вы пишите полсотни строчек и потом пытаетесь их запустить? Конечно так ничего работать не будет. Код мало того, что показан не полностью, так еще и безобразно.
Прошу огромного прощения! Я совсем недавно занялась программированием, и пока еще не знаю что к чему, вот, я постаралась исправить "безобразие", вот весь код :
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
private void button1_Click(object sender, EventArgs e)
        {
                try
            {
                string[] g = File.ReadAllLines("config.pronto");
                string folderbannrepach = g[5]; string ftpbannrepach = g[1];
                progressBar1.Maximum = 10;
                progressBar1.Value = 1;
                label1.Text = "Подождите...";
                string ftpfile = (folderbannrepach + urlTextBox.Text + ".zip");
                string inputfilepath = (folderbannrepach + urlTextBox.Text + ".zip");
                string ftpfilepath = (urlTextBox.Text + ".zip");
                try
                {
                   string ftpfullpath = ("ftp://" + ftpbannrepach + ftpfilepath);
                    label1.Text = "Соединение с FTP сервером";
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
                    ftp.Credentials = new NetworkCredential("ЛОГИН", "ПАРОЛЬ");
                    progressBar1.Value = 3;
                    ftp.KeepAlive = true;
                    ftp.UseBinary = true;
                    ftp.Proxy = null;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;
                    FileStream fs = File.OpenRead(inputfilepath);
                    label1.Text = "Начата отправка файла";
                    progressBar1.Value = 5;
                    byte[] buffer =  new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    label1.Text = "Начата отправка файла";
                    fs.Close();
                    Stream ftpstream = ftp.GetRequestStream();
                    progressBar1.Value = 7;
                    ftpstream.Write(buffer, 0, buffer.Length);
                    ftpstream.Close();
                    progressBar1.Value = 9;
                    
                    //Авторизация на SMTP сервере
                    SmtpClient Smtp = new SmtpClient(g[2], Convert.ToInt32(g[3]));
                    Smtp.Credentials = new NetworkCredential("", "");
                    //Формирование письма
                    MailMessage Message = new MailMessage();
                    Message.From = new MailAddress("");
                    Message.To.Add(new MailAddress(g[4]));
                    Message.Subject = ("На FTP выложен файл с банером в архиве " + "(" + g[1] + " " + urlTextBox.Text + ".zip" + ")");
                    Message.Body = richTextBox1.Text;
                    Smtp.Send(Message);//отправка
                    label1.Text = "Файл отправлен на FTP. Письмо  ушло.";
                    progressBar1.Value = 10;
                }
 
                catch (Exception)
                {
                    label1.Text = ("НЕ НАЙДЕН ФАЙЛ " + ftpfilepath + "! Убедитесь что данный файл присутсвует в папке " + g[5]);
                }
            }
            catch (Exception)
            {
                label1.Text = ("НЕ НАЙДЕН ФАЙЛ ФАЙЛ НАСТРОЕК ПРОГРАММЫ!");
И если можно, по теме :
C#
1
string fileString = System.Text.Encoding.UTF8.GetString(buffer);
Как я поняла, эту сточку и последующие данные в Вашем совете нужно вставить сразу после
C#
1
byte[] buffer =  new byte[fs.Length];
Я побывала, но в файл ничего не пишется И даже если и писалось бы, как это поможет названию файла на FTP? Я совсем запуталась Эх, программирование наверное "не мое"....
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
25.01.2012, 15:47 6
Попробовал считать файл в массив байтов и сохранить двумя разными способами. Если сохранять как массив байтов, а не переводить в строку, то кодировка правильная.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Text;
using System.IO;
 
class Program
{
    static void Main()
    {
        byte[] buffer;
        using (FileStream fs = File.OpenRead("file.txt"))
        {
            buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
        }
        using (Stream ftpstream = File.OpenWrite("file1.txt"))
            ftpstream.Write(buffer, 0, buffer.Length);
        File.WriteAllText("file2.txt", Encoding.Default.GetString(buffer), Encoding.Default);
    }
}
Вы уверены что файл, который был прочитан, находился в правильной кодировке с читаемым текстом? Попробуйте не сохранять данные в файл, а вывести их сперва на экран:
C#
1
Encoding.Default.GetString(buffer)
Если Default не сработает, то попробуйте подобрать кодировку.
0
25.01.2012, 15:47
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
25.01.2012, 15:47
Помогаю со студенческими работами здесь

Кодировка при отправке
Добрый день! Возможно ли настроить Lotus так, чтобы тело письма исходящей SMTP почты (не вложение)...

Ошибка при отправке но ftp
8.0 УТ 10.1 Всем привет. При отправке файла на ftp сервер(FTPСоединение) происходит ошибка...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Блоги программистов
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­­­­­­­­­­ти­б­и­т­н­ы­й асихронный счётчик с управляющим сигналом заде
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru