// получаем json:
string json = JsonConvert.SerializeObject(cookieDictionary);
// получаем экземпляр CookieDictionary из json:
var cookieDictionary2 = JsonConvert.DeserializeObject<CookieDictionary>(json);
// string cookiesRaw = File.ReadAllText(string.Format("Cookies_{0}.txt", textBox1.Text));
string cookiesRaw = "ключ1=значение1; ключ2=значение2";
var cookies = cookiesRaw.Split(';').Select(itm => itm.Split('=')).
ToDictionary(k => k[0].Trim(), v => v[1].Trim());
httpRequest.Cookies = new CookieDictionary();
foreach(var item in cookies)
{
httpRequest.Cookies.Add(item.Key, item.Value);
}
public class Backup
{
public Basic Basic { get; set; }
public List<Base> Bases { get; set; }
}
public class Basic
{
public string Path1C { get; set; }
}
public class Base
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string Mode { get; set; }
[XmlAttribute]
public string Path { get; set; }
}
// из строки
string source =
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(source)))
{
var serializer = new XmlSerializer(typeof(Backup));
var backup = (Backup)serializer.Deserialize(ms);
foreach (var b in backup.Bases)
{
Console.WriteLine("Name: {0}", b.Name);
Console.WriteLine("MODE: {0}", b.Mode);
Console.WriteLine("Path: {0}", b.Path);
}
}
var xml = new XmlDocument();
// из файла:
// xml.Load("XMLFile1.xml");
// из строки
xml.LoadXml
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
// читаем и выводим все элементы Base из /Backup/Bases:
foreach (XmlNode n in xml.SelectNodes("/Backup/Bases/Base"))
{
Console.WriteLine("Name: {0}", n.Attributes["Name"].Value);
Console.WriteLine("MODE: {0}", n.Attributes["MODE"].Value);
Console.WriteLine("Path: {0}", n.Attributes["Path"].Value);
}
string source =
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(source)))
// если из файла, то без MemoryStream; или лучше использовать FileStream
// using (var xml = XmlReader.Create("XMLFile1.xml"))
using (var xml = XmlReader.Create(ms))
{
while (xml.Read())
{
switch (xml.NodeType)
{
case XmlNodeType.Element:
// нашли элемент Base
if (xml.Name == "Base")
{
// выводим атрибуты
Console.WriteLine("Name: {0}", xml.GetAttribute("Name"));
Console.WriteLine("MODE: {0}", xml.GetAttribute("MODE"));
Console.WriteLine("Path: {0}", xml.GetAttribute("Path"));
}
break;
}
}
}
var file1 = new Attachment(textBox9.Text + "1.png");
var file1 = new Attachment(textBox9.Text + "1.png", "image/png");
var file1 = new Attachment(Path.Combine(textBox9.Text, "1.png"), "image/png");
var result = new List<string>();
foreach (Match m in matches)
{
result.Add(m.Value);
}
// в result будет коллекция строк
using System.Linq;
var stringArray = matches.Cast<Match>().Select(m => m.Value).ToArray();
private void propertyGrid1_PropertyValueChanged(Object sender, PropertyValueChangedEventArgs e)
{
System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "ChangedItem", e.ChangedItem );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "OldValue", e.OldValue );
messageBoxCS.AppendLine();
MessageBox.Show(messageBoxCS.ToString(), "PropertyValueChanged Event" );
}
// запускаем процесс
var process = System.Diagnostics.Process.Start(@"C:\windows\system32\calc.exe");
// убиваем процесс
process.Kill();
// или отправляем команду на закрытие главного окна
// process.CloseMainWindow();
// запуск можно выполнить через ProcessStartInfo,
// это может быть более удобней и больше возможностей
var processStartInfo = new System.Diagnostics.ProcessStartInfo();
// путь к файлу программы
processStartInfo.FileName = @"C:\windows\system32\notepad.exe";
// передаем аргументы (в данном случае путь файла для открытия)
processStartInfo.Arguments = @"C:\Windows\System32\drivers\etc\hosts";
// запускаем процесс
var process2 = System.Diagnostics.Process.Start(processStartInfo);
// если необходимо, можем получить список всех процессов
var processes = System.Diagnostics.Process.GetProcesses();
// для примера, выводим в консоль
foreach(var p in processes)
{
Console.WriteLine("PID#{0}, {1}", p.Id, p.ProcessName);
// можем поубивать все блокноты
// if (p.ProcessName == "notepad")
// {
// p.Kill();
// }
}
// создаем параметры запуска процесса
var processStartInfo = new System.Diagnostics.ProcessStartInfo();
processStartInfo.FileName = @"C:\windows\system32\notepad.exe";
processStartInfo.Arguments = @"C:\Windows\System32\drivers\etc\hosts";
// создаем экземпляр процесса
var process = new System.Diagnostics.Process();
// передаем параметры
process.StartInfo = processStartInfo;
// разрешаем использование обработчиков событий
process.EnableRaisingEvents = true; // <-- требуется для работы обработчика завершения процесса
// цепляем обработчик завершения работы процесса
// (лучше сделать нормальную функцию, а не анонимную, как показано в примере)
process.Exited += (object sender, EventArgs e) =>
{
// этот блок будет выполнен, когда работа процесса будет завершена
// экземпляр процесса можно найти в sender: строгий тип - ((System.Diagnostics.Process)sender)
// (хотя в данном примере без проблем можно использовать process, это будет даже удобней)
// для примера, выводим в консоль идентификатор завершенного процесса
Console.WriteLine("PID#{0} завершил работу", ((System.Diagnostics.Process)sender).Id);
};
// запускаем процесс
process.Start();
var data = (JObject)JsonConvert.DeserializeObject("данные JSON");
foreach(JObject item in data["response"]["items"])
{
// var photos = item.Properties().Where(p => p.Name.StartsWith("photo_")).ToArray();
// если считать, что последнее изображение самое большое
var photo = item.Properties().LastOrDefault(p => p.Name.StartsWith("photo_") &&
p.Value != null &&
p.Value.ToString() != ""
);
/*
// вариант с извлечением номера и сортировкой
// при условии, что после photo_ всегда будет число
// (если нет, то придется это учитывать отдельно)
var photo = item.Properties().Where(p => p.Name.StartsWith("photo_") &&
p.Value != null &&
p.Value.ToString() != ""
).OrderBy(p => Convert.ToInt32(p.Name.Substring(p.Name.LastIndexOf("_") + 1))).LastOrDefault();
*/
if (photo != null)
{
// выводим адрес изображения в консоль
Console.WriteLine(photo.Value.ToString());
}
}
<asp:LinkButton ID="lnkPrev"
Text="Назад"
RunAt="server"
OnClick="lnkPrev_Click"
/>
<asp:Image ID="Image1"
ImageUrl="~/img/1.jpg"
RunAt="server"
/>
<asp:LinkButton ID="lnkNext"
Text="Вперёд"
RunAt="server"
OnClick="lnkNext_Click"
/>
protected void lnkPrev_Click(object sender, EventArgs e)
{
// получаем список файлов в папке ~/img
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
// текущий путь берем из Image1.ImageUrl
var currentPath = Server.MapPath(Image1.ImageUrl);
// ищем текущий путь среди полученных файлов
int index = Array.IndexOf(files, currentPath);
// проверяем, нашлось что-то или нет
if (index != -1)
{
// проверяем, можно получить предыдущий файл или нет
if (index - 1 > 0)
{
// можно, берем его
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index - 1]));
}
else
{
// нельзя, берем последний из списка
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[files.Length - 1]));
}
}
}
protected void lnkNext_Click(object sender, EventArgs e)
{
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
var currentPath = Server.MapPath(Image1.ImageUrl);
int index = Array.IndexOf(files, currentPath);
if (index != -1)
{
// проверяем, есть файлы впереди или нет
if (files.Length > index + 1)
{
// есть, берем следующий файл
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index + 1]));
}
else
{
// нет, берем первый из списка
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[0]));
}
}
}
<asp:LinkButton ID="lnkPrev"
Text="Назад"
RunAt="server"
CommandArgument="-1"
OnClick="LinkButton_Click"
/>
<asp:Image ID="Image1"
ImageUrl="~/img/1.jpg"
RunAt="server"
/>
<asp:LinkButton ID="lnkNext"
Text="Вперёд"
RunAt="server"
CommandArgument="1"
OnClick="LinkButton_Click"
/>
protected void LinkButton_Click(object sender, EventArgs e)
{
var lnk = (LinkButton)sender;
var files = System.IO.Directory.GetFiles(Server.MapPath("~/img"));
var currentPath = Server.MapPath(Image1.ImageUrl);
int index = Array.IndexOf(files, currentPath);
// если подумать, то этот блок кода можно уменьшить
if (index != -1)
{
if (lnk.CommandArgument == "1")
{
if (files.Length > index + 1)
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index + 1]));
}
else
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[0]));
}
}
else
{
if (index - 1 > 0)
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[index - 1]));
}
else
{
Image1.ImageUrl = String.Format("~/img/{0}", System.IO.Path.GetFileName(files[files.Length - 1]));
}
}
}
}
private async Task<string> Get(string url)
{
using (var client = new HttpClient())
{
using (var r = await client.GetAsync(new Uri(url)))
{
return await r.Content.ReadAsStringAsync();
}
}
}
string result = await Get("https://toster.ru/q/470456");
private void Get(string url)
{
Task.Run(async () =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = await req.GetResponseAsync();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = await sr.ReadToEndAsync();
sr.Close();
// передаем результат
ResultCallback(url, result);
});
}
private void ResultCallback(string url, string result)
{
// выводим в консоль результат
Console.WriteLine(url);
Console.WriteLine(result);
}
private void Get(string url)
{
Task.Run(async () =>
{
using (var client = new HttpClient())
{
using (var r = await client.GetAsync(new Uri(url)))
{
string result = await r.Content.ReadAsStringAsync();
ResultCallback(url, result);
}
}
});
}
private void Get(string url)
{
// выполняем запрос в отдельном потоке
Task.Run(() =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = sr.ReadToEnd();
sr.Close();
// передаем результат в функцию обратного вызова
ResultCallback(url, result);
});
}
private void ResultCallback(string url, string result)
{
Console.WriteLine(url);
Console.WriteLine(result);
}
private void Get(string url)
{
// создаем поток
var t = new Thread(() =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = sr.ReadToEnd();
sr.Close();
ResultCallback(url, result);
});
// запускаем
t.Start();
}
private void ResultCallback(string url, string result)
{
Console.WriteLine(url);
Console.WriteLine(result);
}
@{
var grid = new WebGrid(/*...*/);
}
@grid.GetHtml(mode: WebGridPagerModes.Numeric, numericLinksCount: 10)
или отдельно список страниц:
@grid.Pager(numericLinksCount: 10)
public IHtmlString GetHtml( string tableStyle, string headerStyle, string footerStyle, string rowStyle, string alternatingRowStyle, string selectedRowStyle, string caption, bool displayHeader, bool fillEmptyRows, string emptyRowCellValue, IEnumerable<WebGridColumn> columns, IEnumerable<string> exclusions, WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount, Object htmlAttributes )
numericLinksCount
Тип: System.Int32
Число цифровых ссылок на ближайшие страницы WebGrid. Текст каждой цифровой ссылки на страницу содержит номер страницы. Задайте флаг Numeric параметра mode, чтобы эти элементы управления отображались на странице.
public HelperResult Pager( WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount )
numericLinksCount
Тип: System.Int32
Число отображаемых цифровых ссылок на страницы. По умолчанию используется значение 5.
// входящие данные
var arr = new int[] { 5, 10, 7, 123, 0 };
// Console.WriteLine(String.Join("+", arr.OrderBy(n => n).Select(n => n.ToString())));
// сортируем
var sorted = arr.OrderBy(n => n);
// склеиваем
Console.WriteLine(String.Join("+", sorted.Select(n => n.ToString())));
// или без вызова ToString(), если используемая версия .NET позволит:
// Console.WriteLine(String.Join("+", sorted));
// или с вызовом ToArray() для ранних версий .NET:
// String.Join("+", sorted.Select(n => n.ToString()).ToArray())
cd C:\test
rem переключаемся на диск F:
F:
rem переходим к каталогу F:\test
cd F:\test
mono helloworld.exe
dotnet helloworld.exe
# выполнение из исходного кода в текущем каталоге:
dotnet run
sed ':a;N;$!ba;s/""/"world"/2'
echo "hello: \"\"
hello: \"\"
hello: \"\"" | sed ':a;N;$!ba;s/""/"world"/2'
sed '2s/""/"world"/1'
using System;
using System.Drawing;
using System.Net.Http;
using System.Windows.Forms;
using Nemiro.OAuth;
using Nemiro.OAuth.LoginForms;
namespace InstagramWinForms
{
public partial class Form1 : Form
{
// базовый адрес API
private const string API_BASE_URL = "https://api.instagram.com/v1";
// элемент для хранения полученных изображений
private ImageList ImageList = new ImageList();
// элемент для вывода изображений
private ListView ListView1 = new ListView();
private string AccessToken;
public Form1()
{
InitializeComponent();
// размер изображений 150x150px, 16bit
this.ImageList.ImageSize = new Size(150, 150);
this.ImageList.ColorDepth = ColorDepth.Depth16Bit;
// настраиваем список для вывода
this.ListView1.View = View.LargeIcon;
this.ListView1.LargeImageList = this.ImageList;
this.ListView1.Dock = DockStyle.Fill;
// добавляем список на форму
this.Controls.Add(this.ListView1);
}
private void Form1_Load(object sender, EventArgs e)
{
// запрос на получение маркера доступа
this.GetAccessToken();
}
private void GetAccessToken()
{
// создаем форму для Instagram
// ВНИМАНИЕ: используйте собственный идентификатор и ключ
// получить идентификатор и ключ можно на сайте instagram:
// https://www.instagram.com/developer/clients/manage/
var login = new InstagramLogin
(
// client id вашего приложения
"9fcad1f7740b4b66ba9a0357eb9b7dda",
// client key вашего приложения
"3f04cbf48f194739a10d4911c93dcece",
// требуется адрес возврата,
// можно использовать указанный,
// но лучше сделать свой
"http://oauthproxy.nemiro.net/",
// права доступа
// https://www.instagram.com/developer/authorization/
// для public_content (и возможно других) убедитесь,
// что в настройках приложения (на сайте instagram)
// в разделе Permissions нет никаких требований
// (если требования есть, то чтобы все работало,
// нужно их удовлетворить :-) ...)
scope: "basic public_content",
// требуем получить данные профиля пользователя
loadUserInfo: true
);
// привязываем форму авторизации к текущей форме
login.Owner = this;
// показываем форму
login.ShowDialog();
if (login.IsSuccessfully)
{
// все прошло успешно, запоминаем маркер доступа
this.AccessToken = login.AccessToken.Value;
// выводим в заголовок текущей формы имя пользователя
this.Text = (login.UserInfo.DisplayName ?? login.UserInfo.UserName);
// получаем изображения
this.GetRecentMedia();
}
else
{
MessageBox.Show("Error...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void GetRecentMedia()
{
// отправляем запрос на получение изображений
OAuthUtility.GetAsync
(
String.Format
(
"{0}/users/self/media/recent?access_token={1}",
API_BASE_URL,
this.AccessToken
),
// результат запроса будет передан в метод GetRecentMedia_Result
callback: GetRecentMedia_Result
);
}
private async void GetRecentMedia_Result(RequestResult result)
{
if (result.StatusCode == 200)
{
// получили успешный ответ
// обрабатываем его
foreach (UniValue item in result["data"])
{
// загружаем текущую картинку
using (var client = new HttpClient())
{
var s = await client.GetStreamAsync(item["images"]["thumbnail"]["url"].ToString());
// добавляем изображение в список
Invoke(new Action(() => this.ImageList.Images.Add(Image.FromStream(s))));
}
// создаем элемент для вывода в список
var image = new ListViewItem();
// название изображения
image.Text = item["caption"]["text"].ToString();
// индекс изображения в списке (ImageList)
image.ImageIndex = this.ImageList.Images.Count - 1;
// добавляем элемент в список
Invoke(new Action(() => this.ListView1.Items.Add(image)));
}
}
else
{
this.ShowError(result);
}
}
private void ShowError(RequestResult result)
{
if (result["meta"]["error_message"].HasValue)
{
MessageBox.Show
(
result["meta"]["error_message"].ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
else
{
MessageBox.Show
(
result.ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.GetRecentMedia();
}
}
}