На этом занятии мы познакомимся с основными возможностями языка программирования C# для работы с потоками (stream) и наиболее часто используемой их разновидностью для работы с файлами (FileStream). Научимся безопасно работать с потоками с использованием конструкций try/catch/finally и using. Также поговорим про кодировки.
все круто спасибо, делал сам запись и чтение, задолбался с чтением и записью построчно, все сделал через циклы, а оказалось намного проще.(запомню и в след раз сделаю этим способом )
Спасибо! Отлично объясняешь, редко такое встретишь на самом деле. У меня вопрос/идея возникла. Каким образом я могу организовать работу с одним файлом(чтение / запись) с двух разных экземпляров моей программы? Чтобы обращения от экземпляров программы к файлу каким-либо образом становились в очередь или перехватывались промежуточным сервисом, который в свою очередь уже регулирует обращения и отрабатывает команды? Подскажите, пожалуйста, с чего копать начинать?
Здравствуйте. Подскажите пожалуйста, почему так происходит в описанной ситуации - есть метод, который как аргумент принимает обьект класса ,а далее выводит его свойство. Почему я могу при обращении к методу в аргументы задать новый обьект без сохранения и метод сработает без ошибки?(Аргумент при вызове метода - (new Class1("Alpaca") ,где Class1 содержит конструктор, записывающий строку "Alpaca" в свойство.)
У чела была такая же проблема с закрытием потока,после создания файла,он просил критики в сторону своего кода,ему сказали,что выносить библиотечный класс в отдельный с таким же функционалом - скверный стиль написания кода(является ошибкой проектирования).Что можно с этим сделать?В 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; } }
Уважаемый вадим а может подсказать почему всплывает данное исключение ? 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(); } } } }
Кстати, чтобы постоянно не ходит через Проводник для чтения и удаления созданного файл, можно в Solution Explorer, нажать кнопку "Show All Files", что позволит добраться до файла, прочитать и удалить его прям из VS.
Спасибо за урок, но можете подсказать как к оператору стринг применить || А то в противном сучили код раздувается else if (bay.ToLower() == "12" || "21") { bay = "Яблок и Бананов"; doxod = (fruit22 * result) + (fruit.Price * result); }
Спасибо огромное я щяс пишу игру морской бой, программирование учу 3 месяцев и я столкнулся с проблемой когда пользователь вводит свре имя при следующим запуске программы оно не сохраняется тв ы мне помог спасибо огромное!!!!
в винформ всё это не работает. Выдаёт ошибку, что не может преобразовать чар в стринг. sreamreadline. Вообще программировать в консоли, когда есть винформ - это средневековье.
Когда делал свой первый какой - никакой проект ,пилил обучение чат бота через текстовой файл , и постоянно удивлялся почему он не сохраняет прошлую писанину...Теперь я осознал ошибку и буду ,наверное , продолжать его делать.)
Похожая история с игрой морской бой я там здела чтоб пользователь вводил свое имя и столкнулся с проблемой что ися не сохраняется это видео мне очень помогле спасибо тебе огромное!!!!!!!!! Ё!
А если читать весь файл через *var list = File.ReadAllLines("path").ToList();* работать с листом, и записывать обратно, если надо *File.WriteAllLines("path", list);* У такого подхода есть минусы? (файлы < 1mb)
Как сделать ,чтобы по команде читало данные из файла .Вот мой код 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(); } } } } } }
Привет. Ребят когда делал дз выскакивает ошибка. даже не знаю что не так. подскажите пожалуйста. вот код: 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); } } } }
Не понятно, зачем такие уж совсем примитивные вещи рассказывать, как что такое файл и зачем он нужен? Навряд ли какие-то стримы по программированию будет смотреть человек, который не понимает, что такое файл.
Запись в файл в кодировке 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
Это просто мега изумительно, и тема очень интересная, после просмотра урока очень много интересных идей в голову полезло, круто
Отлично и понятно объясняешь на различных бытовых примерах!!!! Учусь с нуля и пока все понятно и ясно!
Пацаны вообще ребята . Классно ,Особенно этот в белом . Класс , умеете могёте.! Спасибо за четкие обьяснения ,
Спасибо, Вадим! Только благодаря тебе я стал понимать эту тему потоков. Ты реально классно объясняешь!
37:49
Спасибо за твои уроки. Ты меня нереально выручил.
Завтра два года этому видео, а я только вчера решил посмотреть весь курс, спасибо, польза есть
уже 4)
@@qaisarbaltabay и это все ещё актуально
Случайно нашёл Ваш канал!Очень круто объясняете и уже мне помогли!Спасибо за Ваш труд!
Рад помочь )
все круто спасибо, делал сам запись и чтение, задолбался с чтением и записью построчно, все сделал через циклы, а оказалось намного проще.(запомню и в след раз сделаю этим способом )
спасибо, что стрим с чатом сохранили
Мужик, спасибо огромное, теперь понимаю че это за юзинги и как работать с файлами на практике!
Да прибудет с тобой сила кода и старина С# вовеки, фминь!
спасибо за уроки
це решотка 😂😂 40:37
Спасибо за уроки😉
обажаю)
Спасибо за уроки!) Даже годами позже актуально)
Спасибо! Отлично объясняешь, редко такое встретишь на самом деле. У меня вопрос/идея возникла. Каким образом я могу организовать работу с одним файлом(чтение / запись) с двух разных экземпляров моей программы? Чтобы обращения от экземпляров программы к файлу каким-либо образом становились в очередь или перехватывались промежуточным сервисом, который в свою очередь уже регулирует обращения и отрабатывает команды? Подскажите, пожалуйста, с чего копать начинать?
тут как раз тебе нужно или использовать чтение из разных потоков с блокировкой доступа по объекту синхронизации. или использовать очередь )
Видео идёт 76 минут. Поставьте 2х скорость воспроизведения. Не за что.) (38 минут к жизни)
я на х4 смотрю)
Жаль ответы на тупые коментарии в онлайн чате никуда не убрать , мешают очень
@@АристархЗловредович можно скачать видео и обрезать его, если блок с комментариями так сильно мешает. (без негатива)
@@nikitaisyuk8630 Да нет никакого негатива , просто коменты там в основном не потеме и отвлекают автора видно же
спасибо большое за курс! не подскажите, где найти найти ссылку на чат в телеге в котором можно пообщаться с другими участниками курса?
было бы круто
Здравствуйте. Подскажите пожалуйста, почему так происходит в описанной ситуации - есть метод, который как аргумент принимает обьект класса ,а далее выводит его свойство. Почему я могу при обращении к методу в аргументы задать новый обьект без сохранения и метод сработает без ошибки?(Аргумент при вызове метода - (new Class1("Alpaca") ,где Class1 содержит конструктор, записывающий строку "Alpaca" в свойство.)
У чела была такая же проблема с закрытием потока,после создания файла,он просил критики в сторону своего кода,ему сказали,что выносить библиотечный класс в отдельный с таким же функционалом - скверный стиль написания кода(является ошибкой проектирования).Что можно с этим сделать?В 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;
}
}
у меня вопрос а где часть урока про потоки
У нас скоро будет 2020 )) привет тебе из будущего ))
Спасибо и тебе привет )
Уважаемый вадим а может подсказать почему всплывает данное исключение ?
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();
}
}
}
}
Ох, ошибка конечно у тебя весёлая. Блокирующий доступ к внешнему ресурсу еще никто не отменял )))
Кстати, чтобы постоянно не ходит через Проводник для чтения и удаления созданного файл, можно в Solution Explorer, нажать кнопку "Show All Files", что позволит добраться до файла, прочитать и удалить его прям из VS.
Спасибо за урок, но можете подсказать как к оператору стринг применить ||
А то в противном сучили код раздувается
else if (bay.ToLower() == "12" || "21")
{
bay = "Яблок и Бананов";
doxod = (fruit22 * result) + (fruit.Price * result);
}
bay.ToLower() == "12" || bay.ToLower() == "21"
Спасибо огромное я щяс пишу игру морской бой, программирование учу 3 месяцев и я столкнулся с проблемой когда пользователь вводит свре имя при следующим запуске программы оно не сохраняется тв ы мне помог спасибо огромное!!!!
Аааа еееее
в винформ всё это не работает. Выдаёт ошибку, что не может преобразовать чар в стринг. sreamreadline. Вообще программировать в консоли, когда есть винформ - это средневековье.
Привет, отличные стримы)) Планируешь питон начинать ?
В следующем году планирую
Я один чуть от ора со стула не улетел? когда пришёл донат и там Ц Решётка, одни на змее программируют мы на Ц решётке
Когда делал свой первый какой - никакой проект ,пилил обучение чат бота через текстовой файл , и постоянно удивлялся почему он не сохраняет прошлую писанину...Теперь я осознал ошибку и буду ,наверное , продолжать его делать.)
Очень рад, что помог. И да, на ошибках учатся, это нормально )
Похожая история с игрой морской бой я там здела чтоб пользователь вводил свое имя и столкнулся с проблемой что ися не сохраняется это видео мне очень помогле спасибо тебе огромное!!!!!!!!! Ё!
смотрю это видео в 22.12.2023
Как удалять строки в файле
Спасибо!)
А вот если я записываю в файл переменную, могу ли я потом считывать из этого файла именно эту переменую?
Можешь. Можешь вообще все что угодно записать, а потом считать.
А если читать весь файл через *var list = File.ReadAllLines("path").ToList();* работать с листом, и записывать обратно, если надо *File.WriteAllLines("path", list);* У такого подхода есть минусы? (файлы < 1mb)
Как сделать ,чтобы по команде читало данные из файла .Вот мой код 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();
}
}
}
}
}
}
Разобрался? Или нужна помощь?
этот урок должен быть 17 так как прошлый был 16
1 15
может кто рассказать как читать текст из файлов из расширением .docx?
Для работы с word и excel есть специальная библиотека. Interop вроде бы называется. Сейчас скину ссылку почитать
docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/interop/walkthrough-office-programming
@@CODEBLOG огромное спасибо
+++
А как сделать чтобы он мог читать еще и русские символы? (Не только английские)
использовать подходящую кодировку (и желательно не ошибаться при преобразовании)
♥ Спасибо за видео! Нашел видео с примером создания программы с многопоточностью ua-cam.com/video/X5AxuT5tbZ4/v-deo.html ☺
Привет. Ребят когда делал дз выскакивает ошибка. даже не знаю что не так. подскажите пожалуйста. вот код:
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 решил создать новый файл и все заработало))) я не знаю как это работает) но код точно такой же прям
Спосеба
Не понятно, зачем такие уж совсем примитивные вещи рассказывать, как что такое файл и зачем он нужен? Навряд ли какие-то стримы по программированию будет смотреть человек, который не понимает, что такое файл.
А вдруг..
Запись в файл в кодировке Windows-1251:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
StreamWriter sw = new StreamWriter("test.txt", false, Encoding.GetEncoding(1251));
sw.WriteLine("Привет!");
43:15
+++