На этом занятии мы познакомимся с основными возможностями языка программирования C# для работы с потоками (stream) и наиболее часто используемой их разновидностью для работы с файлами (FileStream). Научимся безопасно работать с потоками с использованием конструкций try/catch/finally и using. Также поговорим про кодировки.
все круто спасибо, делал сам запись и чтение, задолбался с чтением и записью построчно, все сделал через циклы, а оказалось намного проще.(запомню и в след раз сделаю этим способом )
Спасибо! Отлично объясняешь, редко такое встретишь на самом деле. У меня вопрос/идея возникла. Каким образом я могу организовать работу с одним файлом(чтение / запись) с двух разных экземпляров моей программы? Чтобы обращения от экземпляров программы к файлу каким-либо образом становились в очередь или перехватывались промежуточным сервисом, который в свою очередь уже регулирует обращения и отрабатывает команды? Подскажите, пожалуйста, с чего копать начинать?
Здравствуйте. Подскажите пожалуйста, почему так происходит в описанной ситуации - есть метод, который как аргумент принимает обьект класса ,а далее выводит его свойство. Почему я могу при обращении к методу в аргументы задать новый обьект без сохранения и метод сработает без ошибки?(Аргумент при вызове метода - (new Class1("Alpaca") ,где Class1 содержит конструктор, записывающий строку "Alpaca" в свойство.)
Уважаемый вадим а может подсказать почему всплывает данное исключение ? yadi.sk/i/CoR_V_MVC4WX9g Делаю все точно как у вас но в ответ получаю: "Процесс не может получить доступ к файлу "C:\Users\ALEX\Downloads\__Test\bl.txt", так как этот файл используется другим процессом."
Код для пытливых умов. интересно надет кто то в чем проблема была или нет )) using System.IO; using System.Text; namespace _16_Stream_fale { class Program { static void Main(string[] args) { using (var sw = new StreamWriter("C:\\Users\\ALEX\\Downloads\\__Test\\bl.txt", true, Encoding.ASCII)) { int i = 0; while (i < 100) { sw.WriteLine("Hello"); sw.WriteLine("Hello, Moskali"); sw.WriteLine("Привет"); sw.WriteLine(i); i++; } using (var sr = new StreamReader("C:\\Users\\ALEX\\Downloads\\__Test\\bl.txt", Encoding.UTF8)) { var text = sr.ReadToEnd(); System.Console.WriteLine(text); } System.Console.ReadLine(); } } } }
У чела была такая же проблема с закрытием потока,после создания файла,он просил критики в сторону своего кода,ему сказали,что выносить библиотечный класс в отдельный с таким же функционалом - скверный стиль написания кода(является ошибкой проектирования).Что можно с этим сделать?В Main и Switch напрямую писать,вроде бы,тоже не вариант.Если сравнивать с switch ,то в классе он выглядит как-то читабельнее. class Program { static void Main(string[] args) { while (true) { Console.WriteLine("Choose the operation: 1)Create file 2)Delete file 3)Write in file 4)Read file"); switch (Console.ReadKey().Key) { case ConsoleKey.D1: { Console.WriteLine("Enter the path and name of file:"); var path = Console.ReadLine(); FileOperation.CreateFile(path); } break; case ConsoleKey.D2: { Console.WriteLine("Enter the path and name of file:"); var path = Console.ReadLine(); FileOperation.DeleteFile(path); } break; case ConsoleKey.D3: { Console.WriteLine("Enter the path and name of file:"); var path = Console.ReadLine(); Console.WriteLine("Enter the data in file:"); var data = Console.ReadLine(); FileOperation.WriteData(path,data); } break; case ConsoleKey.D4: { Console.WriteLine("Enter the path and name of file:"); var path = Console.ReadLine(); FileOperation.ReadData(path); } break; } Console.WriteLine("Close programm?"); var answer = Console.ReadLine(); if(answer.ToLower() == "yes") { break; } } } } static class FileOperation { public static bool CreateFile(string path) { FileInfo file = new FileInfo(path); if (file.Exists) { Console.WriteLine("File already exists"); } else { file.Create().Close(); Console.WriteLine("File creation is successfuly..."); } return true; }
public static bool DeleteFile(string path) { if (File.Exists(path)) { File.Delete(path); Console.WriteLine("File deleted..."); } else { Console.WriteLine("File doesn`t exist"); } return true; } public static bool WriteData(string path,string data) { if (File.Exists(path)) { using(var write_data_in_file = new StreamWriter(path, true, Encoding.UTF8)) { write_data_in_file.WriteLine(data); write_data_in_file.Dispose(); } } else { Console.WriteLine("Incorrect path or file doesn`t exist"); } return true; } public static bool ReadData(string path) { if (File.Exists(path)) { using(var read_data_in_file = new StreamReader(path, Encoding.UTF8)) { Console.WriteLine(read_data_in_file.ReadToEnd()); read_data_in_file.Dispose(); } } else { Console.WriteLine("Incorrect path or file doesn`t exist"); } return true; } }
Спасибо огромное я щяс пишу игру морской бой, программирование учу 3 месяцев и я столкнулся с проблемой когда пользователь вводит свре имя при следующим запуске программы оно не сохраняется тв ы мне помог спасибо огромное!!!!
Спасибо за урок, но можете подсказать как к оператору стринг применить || А то в противном сучили код раздувается else if (bay.ToLower() == "12" || "21") { bay = "Яблок и Бананов"; doxod = (fruit22 * result) + (fruit.Price * result); }
Кстати, чтобы постоянно не ходит через Проводник для чтения и удаления созданного файл, можно в Solution Explorer, нажать кнопку "Show All Files", что позволит добраться до файла, прочитать и удалить его прям из VS.
А если читать весь файл через *var list = File.ReadAllLines("path").ToList();* работать с листом, и записывать обратно, если надо *File.WriteAllLines("path", list);* У такого подхода есть минусы? (файлы < 1mb)
в винформ всё это не работает. Выдаёт ошибку, что не может преобразовать чар в стринг. sreamreadline. Вообще программировать в консоли, когда есть винформ - это средневековье.
Когда делал свой первый какой - никакой проект ,пилил обучение чат бота через текстовой файл , и постоянно удивлялся почему он не сохраняет прошлую писанину...Теперь я осознал ошибку и буду ,наверное , продолжать его делать.)
Похожая история с игрой морской бой я там здела чтоб пользователь вводил свое имя и столкнулся с проблемой что ися не сохраняется это видео мне очень помогле спасибо тебе огромное!!!!!!!!! Ё!
Привет. Ребят когда делал дз выскакивает ошибка. даже не знаю что не так. подскажите пожалуйста. вот код: using System; using System.IO; using System.Text; namespace File.DZ { class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; Console.WriteLine("Введите ваше имя:"); var Name = Console.ReadLine(); using (var sw = new StreamWriter("Профиль человека.txt", true, Encoding.UTF8)) { sw.WriteLine(Name); } } } }
Как сделать ,чтобы по команде читало данные из файла .Вот мой код using Ext.Net; using OpenTK.Input; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace StreamAndFile { class Program { static void Main(string[] args) { Console.WriteLine("Type your Name"); var Name = Console.ReadLine(); using (var sw = new StreamWriter("test.txt")) { sw.WriteLine(Name); } Console.ReadKey(); void processKeyboardInput(KeyboardState state) { if (state.IsKeyDown(OpenTK.Input.Key.Space)) { using (var sw = new StreamReader("test.txt")) { sw.ReadToEnd(); } } } } } }
Не понятно, зачем такие уж совсем примитивные вещи рассказывать, как что такое файл и зачем он нужен? Навряд ли какие-то стримы по программированию будет смотреть человек, который не понимает, что такое файл.
Запись в файл в кодировке Windows-1251: Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); StreamWriter sw = new StreamWriter("test.txt", false, Encoding.GetEncoding(1251)); sw.WriteLine("Привет!");
На этом занятии мы познакомимся с основными возможностями языка программирования C# для работы с потоками (stream) и наиболее часто используемой их разновидностью для работы с файлами (FileStream). Научимся безопасно работать с потоками с использованием конструкций try/catch/finally и using. Также поговорим про кодировки.
Пишу из 2024 года)) Спасибо тебе за эти стримы!!! Очень хорошая подача материала!!!
Это просто мега изумительно, и тема очень интересная, после просмотра урока очень много интересных идей в голову полезло, круто
Содержание
Начало (Устройство компьютера) 3:36
Файлы 5:15
Стрим 10:32
Переход к практике 15:32
как читать не весь файл 58:32
Пацаны вообще ребята . Классно ,Особенно этот в белом . Класс , умеете могёте.! Спасибо за четкие обьяснения ,
Отлично и понятно объясняешь на различных бытовых примерах!!!! Учусь с нуля и пока все понятно и ясно!
Мужик, спасибо огромное, теперь понимаю че это за юзинги и как работать с файлами на практике!
Спасибо, Вадим! Только благодаря тебе я стал понимать эту тему потоков. Ты реально классно объясняешь!
Случайно нашёл Ваш канал!Очень круто объясняете и уже мне помогли!Спасибо за Ваш труд!
Рад помочь )
Спасибо за твои уроки. Ты меня нереально выручил.
спасибо, что стрим с чатом сохранили
спасибо за уроки
все круто спасибо, делал сам запись и чтение, задолбался с чтением и записью построчно, все сделал через циклы, а оказалось намного проще.(запомню и в след раз сделаю этим способом )
Завтра два года этому видео, а я только вчера решил посмотреть весь курс, спасибо, польза есть
уже 4)
@@qaisarbaltabay и это все ещё актуально
Да прибудет с тобой сила кода и старина С# вовеки, фминь!
Спасибо! Отлично объясняешь, редко такое встретишь на самом деле. У меня вопрос/идея возникла. Каким образом я могу организовать работу с одним файлом(чтение / запись) с двух разных экземпляров моей программы? Чтобы обращения от экземпляров программы к файлу каким-либо образом становились в очередь или перехватывались промежуточным сервисом, который в свою очередь уже регулирует обращения и отрабатывает команды? Подскажите, пожалуйста, с чего копать начинать?
тут как раз тебе нужно или использовать чтение из разных потоков с блокировкой доступа по объекту синхронизации. или использовать очередь )
Спасибо за уроки😉
37:49
це решотка 😂😂 40:37
Спасибо за уроки!) Даже годами позже актуально)
спасибо большое за курс! не подскажите, где найти найти ссылку на чат в телеге в котором можно пообщаться с другими участниками курса?
было бы круто
обажаю)
Здравствуйте. Подскажите пожалуйста, почему так происходит в описанной ситуации - есть метод, который как аргумент принимает обьект класса ,а далее выводит его свойство. Почему я могу при обращении к методу в аргументы задать новый обьект без сохранения и метод сработает без ошибки?(Аргумент при вызове метода - (new Class1("Alpaca") ,где Class1 содержит конструктор, записывающий строку "Alpaca" в свойство.)
Видео идёт 76 минут. Поставьте 2х скорость воспроизведения. Не за что.) (38 минут к жизни)
я на х4 смотрю)
Жаль ответы на тупые коментарии в онлайн чате никуда не убрать , мешают очень
@@АристархЗловредович можно скачать видео и обрезать его, если блок с комментариями так сильно мешает. (без негатива)
@@nikitaisyuk8630 Да нет никакого негатива , просто коменты там в основном не потеме и отвлекают автора видно же
Уважаемый вадим а может подсказать почему всплывает данное исключение ?
yadi.sk/i/CoR_V_MVC4WX9g
Делаю все точно как у вас но в ответ получаю:
"Процесс не может получить доступ к файлу "C:\Users\ALEX\Downloads\__Test\bl.txt", так как этот файл используется другим процессом."
Вадим спасибо я разобрался пусть останется как головоломка для других пытливых умов) ток не говири ответ )))
Код для пытливых умов. интересно надет кто то в чем проблема была или нет ))
using System.IO;
using System.Text;
namespace _16_Stream_fale
{
class Program
{
static void Main(string[] args)
{
using (var sw = new StreamWriter("C:\\Users\\ALEX\\Downloads\\__Test\\bl.txt", true, Encoding.ASCII))
{
int i = 0;
while (i < 100)
{
sw.WriteLine("Hello");
sw.WriteLine("Hello, Moskali");
sw.WriteLine("Привет");
sw.WriteLine(i);
i++;
}
using (var sr = new StreamReader("C:\\Users\\ALEX\\Downloads\\__Test\\bl.txt", Encoding.UTF8))
{
var text = sr.ReadToEnd();
System.Console.WriteLine(text);
}
System.Console.ReadLine();
}
}
}
}
Ох, ошибка конечно у тебя весёлая. Блокирующий доступ к внешнему ресурсу еще никто не отменял )))
У нас скоро будет 2020 )) привет тебе из будущего ))
Спасибо и тебе привет )
У чела была такая же проблема с закрытием потока,после создания файла,он просил критики в сторону своего кода,ему сказали,что выносить библиотечный класс в отдельный с таким же функционалом - скверный стиль написания кода(является ошибкой проектирования).Что можно с этим сделать?В Main и Switch напрямую писать,вроде бы,тоже не вариант.Если сравнивать с switch ,то в классе он выглядит как-то читабельнее.
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Choose the operation:
1)Create file
2)Delete file
3)Write in file
4)Read file");
switch (Console.ReadKey().Key)
{
case ConsoleKey.D1:
{
Console.WriteLine("Enter the path and name of file:");
var path = Console.ReadLine();
FileOperation.CreateFile(path);
}
break;
case ConsoleKey.D2:
{
Console.WriteLine("Enter the path and name of file:");
var path = Console.ReadLine();
FileOperation.DeleteFile(path);
}
break;
case ConsoleKey.D3:
{
Console.WriteLine("Enter the path and name of file:");
var path = Console.ReadLine();
Console.WriteLine("Enter the data in file:");
var data = Console.ReadLine();
FileOperation.WriteData(path,data);
}
break;
case ConsoleKey.D4:
{
Console.WriteLine("Enter the path and name of file:");
var path = Console.ReadLine();
FileOperation.ReadData(path);
}
break;
}
Console.WriteLine("Close programm?");
var answer = Console.ReadLine();
if(answer.ToLower() == "yes")
{
break;
}
}
}
}
static class FileOperation
{
public static bool CreateFile(string path)
{
FileInfo file = new FileInfo(path);
if (file.Exists)
{
Console.WriteLine("File already exists");
}
else
{
file.Create().Close();
Console.WriteLine("File creation is successfuly...");
}
return true;
}
public static bool DeleteFile(string path)
{
if (File.Exists(path))
{
File.Delete(path);
Console.WriteLine("File deleted...");
}
else
{
Console.WriteLine("File doesn`t exist");
}
return true;
}
public static bool WriteData(string path,string data)
{
if (File.Exists(path))
{
using(var write_data_in_file = new StreamWriter(path, true, Encoding.UTF8))
{
write_data_in_file.WriteLine(data);
write_data_in_file.Dispose();
}
}
else
{
Console.WriteLine("Incorrect path or file doesn`t exist");
}
return true;
}
public static bool ReadData(string path)
{
if (File.Exists(path))
{
using(var read_data_in_file = new StreamReader(path, Encoding.UTF8))
{
Console.WriteLine(read_data_in_file.ReadToEnd());
read_data_in_file.Dispose();
}
}
else
{
Console.WriteLine("Incorrect path or file doesn`t exist");
}
return true;
}
}
Спасибо огромное я щяс пишу игру морской бой, программирование учу 3 месяцев и я столкнулся с проблемой когда пользователь вводит свре имя при следующим запуске программы оно не сохраняется тв ы мне помог спасибо огромное!!!!
Спасибо за урок, но можете подсказать как к оператору стринг применить ||
А то в противном сучили код раздувается
else if (bay.ToLower() == "12" || "21")
{
bay = "Яблок и Бананов";
doxod = (fruit22 * result) + (fruit.Price * result);
}
bay.ToLower() == "12" || bay.ToLower() == "21"
у меня вопрос а где часть урока про потоки
Кстати, чтобы постоянно не ходит через Проводник для чтения и удаления созданного файл, можно в Solution Explorer, нажать кнопку "Show All Files", что позволит добраться до файла, прочитать и удалить его прям из VS.
Аааа еееее
Спасибо!)
А если читать весь файл через *var list = File.ReadAllLines("path").ToList();* работать с листом, и записывать обратно, если надо *File.WriteAllLines("path", list);* У такого подхода есть минусы? (файлы < 1mb)
Привет, отличные стримы)) Планируешь питон начинать ?
В следующем году планирую
А вот если я записываю в файл переменную, могу ли я потом считывать из этого файла именно эту переменую?
Можешь. Можешь вообще все что угодно записать, а потом считать.
может кто рассказать как читать текст из файлов из расширением .docx?
Для работы с word и excel есть специальная библиотека. Interop вроде бы называется. Сейчас скину ссылку почитать
docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/interop/walkthrough-office-programming
@@CODEBLOG огромное спасибо
в винформ всё это не работает. Выдаёт ошибку, что не может преобразовать чар в стринг. sreamreadline. Вообще программировать в консоли, когда есть винформ - это средневековье.
Как удалять строки в файле
Я один чуть от ора со стула не улетел? когда пришёл донат и там Ц Решётка, одни на змее программируют мы на Ц решётке
Когда делал свой первый какой - никакой проект ,пилил обучение чат бота через текстовой файл , и постоянно удивлялся почему он не сохраняет прошлую писанину...Теперь я осознал ошибку и буду ,наверное , продолжать его делать.)
Очень рад, что помог. И да, на ошибках учатся, это нормально )
Похожая история с игрой морской бой я там здела чтоб пользователь вводил свое имя и столкнулся с проблемой что ися не сохраняется это видео мне очень помогле спасибо тебе огромное!!!!!!!!! Ё!
смотрю это видео в 22.12.2023
Привет. Ребят когда делал дз выскакивает ошибка. даже не знаю что не так. подскажите пожалуйста. вот код:
using System;
using System.IO;
using System.Text;
namespace File.DZ
{
class Program
{
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Введите ваше имя:");
var Name = Console.ReadLine();
using (var sw = new StreamWriter("Профиль человека.txt", true, Encoding.UTF8))
{
sw.WriteLine(Name);
}
}
}
}
А почему само сообщение об ошибке не скинул?
И у меня вообще ни какой ошибки нет, все выполнилось корректно
@@CODEBLOG решил создать новый файл и все заработало))) я не знаю как это работает) но код точно такой же прям
А как сделать чтобы он мог читать еще и русские символы? (Не только английские)
использовать подходящую кодировку (и желательно не ошибаться при преобразовании)
1 15
Как сделать ,чтобы по команде читало данные из файла .Вот мой код using Ext.Net;
using OpenTK.Input;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace StreamAndFile
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Type your Name");
var Name = Console.ReadLine();
using (var sw = new StreamWriter("test.txt"))
{
sw.WriteLine(Name);
}
Console.ReadKey();
void processKeyboardInput(KeyboardState state)
{
if (state.IsKeyDown(OpenTK.Input.Key.Space))
{
using (var sw = new StreamReader("test.txt"))
{
sw.ReadToEnd();
}
}
}
}
}
}
Разобрался? Или нужна помощь?
♥ Спасибо за видео! Нашел видео с примером создания программы с многопоточностью th-cam.com/video/X5AxuT5tbZ4/w-d-xo.html ☺
этот урок должен быть 17 так как прошлый был 16
+++
Спосеба
Не понятно, зачем такие уж совсем примитивные вещи рассказывать, как что такое файл и зачем он нужен? Навряд ли какие-то стримы по программированию будет смотреть человек, который не понимает, что такое файл.
А вдруг..
Запись в файл в кодировке Windows-1251:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
StreamWriter sw = new StreamWriter("test.txt", false, Encoding.GetEncoding(1251));
sw.WriteLine("Привет!");
43:15
+++