Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: FileStream, StreamWriter,...  (Прочитано 35173 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
e.o.b.
Гость
« : 04-07-2004 18:19 » 

Есть ли для C# аналог папки include из C++? Где можно посмотреть описание классов C# (не могу найти в папке vs.net)? Вопрос назрел, т.к., в инете (не помню где именно) нашел следующее:
FileStream myStream=File.Open("C:\1.txt", FileMode.Open,FileAccess.Read); было также сказано, что нет необходимости создавать экземпляр класса File при использовании FileStream - почему?
и плюс ко всему на все это дело у меня ругается компилятор и говорит, что объек FileStream не найден (или что-то типа этого).
Так как открыть или создать файл?
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #1 : 05-07-2004 06:02 » 

Цитата
Есть ли для C# аналог папки include из C++?
Все стандартные классы входят в Framework, который хранится в C:\WINDOWS\Microsoft.NET\Framework\номер_версии.

Цитата
Где можно посмотреть описание классов C# (не могу найти в папке vs.net)?
В MSDN, там полная спецификация по каждому классу  Отлично

Цитата
нет необходимости создавать экземпляр класса File при использовании FileStream - почему?
Большинство методов класса File статические, т.е. для их вызова не требуется создавать экземпляр класса. В данном примере нам нужно прочитать/записать данные, а для этих целей потоки как раз и нужны. Метод File.Open возвращает объект FileStream, который и обеспечивает ввод/вывод

Цитата
ругается компилятор и говорит, что объек FileStream не найден (или что-то типа этого).
Подключи родительское пространство имен:
Код:
using System.IO;

Цитата
Так как открыть или создать файл?
Открыть:
Код:
FileStream fileStream = File.Open(@"c:\1.txt", FileMode.Open, FileAccess.Read); 
Создать:
Код:
File.Delete(@"c:\1.txt");
« Последнее редактирование: 29-11-2007 20:59 от Алексей1153++ » Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 05-07-2004 06:07 » 

Вот перепечатка из рассылки по C# :
Цитата
Класс File предназначен для работа с файлами. Он содержит статические методы, котроые позволяют создавать, удалять, переименовывать и делать другие действия с файлами. Для этого класса существует парный класс FileInfo, содержащий аналогичные методы экземпляра класса.

Вот основные методы класса File (все они, разумеется, статические):

Create - создание файла.
Exists - проверка существования файла.
Delete - удалениие файла.
Move - переименование и перемещение файла.
Copy - копирование файла.
А вот пример, демонстрирующий применение этих методов:
Код:
using System;
// Подключаем необходимое пространство имен.
using System.IO;
namespace contest
{
    class Test
    {
        public static void Main()
        {
            // Создаем файл.
            File.Create("C:\\0.txt");
            // Проверка существования файла.
            if(File.Exists("C:\\1.txt"))
            {
                // Удаление файла.
                File.Delete("C:\\1.txt");
            }
            // Переименование файла a.txt в b.txt.
            File.Move("C:\\a.txt", "C:\\b.txt");
            // Перемещение файла.
            File.Move("C:\\c.txt", "D:\\c.txt");
            // Копирование файла.
            File.Copy("D:\\z.txt", "D:\\x.txt");
        }
    }
}
Обратите внимание, что и для перемещения, и для переименования файла мы используем один и тот же статичесикй метод Move (так как по сути это одна и та же операция).
« Последнее редактирование: 29-11-2007 20:59 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Serega
Гость
« Ответ #3 : 05-07-2004 09:47 » 

MSDN просто незаменимый(в прямом смысле, т.к. больше ничего нету Улыбаюсь) источник информации о программировании для Windows, поэтому ставить однозначно !!!

В студии есть Object Browser, в котором можно узнать практическии все о классе
Вызвать его можно через меню(view/object browser), с помощью кнопки на тулбаре
или так:
Пишешь в коде например
Код:
FileStream file;

Жмешь на FileStream правой кнопкой и выбираешь "Go To Definition"
Только не забудь подключить нужный namespace (System.IO)
Записан
Serega
Гость
« Ответ #4 : 05-07-2004 10:34 » 

Все работа по вводу/выводу осуществляется с помощью потоков.
Работать с потоками удобно т.к. они за скрывают от пользователя детали реализации, предоставляя стандартный интерфейс для работы.
Базовым классом для потоков является Stream, в нем определены методы для чтения и записи информации.
Производные классы переопределяют эти методы и реализуют нужную функциональность.
Существует много различных потоков, например: FileStream, MemoryStream, BufferedStream, NetworkStream

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

Существуют удобные классы для чтения и записи различной информации в поток и из потока.
Базовые классы для чтения TextReader, для записи TextWriter.
Для работы с потоками используй StreamReader и StreamWriter.
Другие классы для чтения и записи думаю найдешь сам (есть удобное стредство - Web Matrix, у них замечательный ClassBrowser)

и наконец небольшой пример:
Код:
using(StreamWriter file = new StreamWriter("info.txt"))
{
file.Write("string");
file.WriteLine(123);
}
using используется для того, чтобы при выходе из её области видимости поток автоматически закрылся (придумано для таких забывчивых как я Улыбаюсь)
« Последнее редактирование: 29-11-2007 21:01 от Алексей1153++ » Записан
Serega
Гость
« Ответ #5 : 05-07-2004 10:51 » 

Теперь насчет файлов.
В С++ файл (File или CFile) был файловым потоком, с которым и работали.
в .NET по другому:
Файл - это объект файловой системы, и с ним можно выполнять стандартные операции с файлами (создать, удалить, открыть, скопировать, переместить, узнать атрибуты и т.п.), для всех этих операции не обязательно создавать обьект File, поэтому это и нельзя сделать Улыбаюсь
Работа с данными, хранящимися в файле, осуществляется через файловый поток, который можно создать, открыв файл для чтения и/или записи
Код:
FileStream file = File.Open("info.txt", FileMode.OpenOrCreate);
и работать с ним
Код:
StreamWriter writer = new StreamWriter(file);
writer.WriteLine("Hello World !!!");
writer.WriteLine("Now is: " + DateTime.Now);
writer.Close();
в данном случае поток file закрывать не нужно, т.к. writer закроет его
« Последнее редактирование: 29-11-2007 21:03 от Алексей1153++ » Записан
e.o.b.
Гость
« Ответ #6 : 05-07-2004 10:54 » 

Как дописать информацию в конец файла? В VC++ был SeektoEnd, а в С#? А можно вообще, писать что-либо не в конец файла, а в начало, со смещением того что в нем было?
Записан
Serega
Гость
« Ответ #7 : 05-07-2004 11:56 » 

Во-первых: не стоит закрывать поток в цикле Улыбаюсь, делай это после того как записал всю информацию

Во-вторых: Close() врайтера сам вызывает Flush() и закрывает поток, в который осуществлялась запись

Чтобы дописывать информацию в конец файла, нужно либо указать это врайтеру
Код:
StreamWriter writer = new StreamWriter(path, true);
или переместить указатель на текущую позицию в конец
Код:
FileStream file = File.OpenWrite(path);
file.Seek(0, SeekOrigin.End);
StreamWriter writer = new StreamWriter(file);
« Последнее редактирование: 29-11-2007 21:04 от Алексей1153++ » Записан
e.o.b.
Гость
« Ответ #8 : 05-07-2004 19:33 » 

А как построчно читать из файла в строку: как организовать цикл с первой строки до конца файла, для поиска нужной строки?
Записан
Serega
Гость
« Ответ #9 : 06-07-2004 10:48 » 

Код:
using(StreamReader reader = new StreamReader(path))
{
String str = reader.ReadLine();
for(; str != null; str = reader.ReadLine())
{
//обработка строки
}
}
« Последнее редактирование: 29-11-2007 21:04 от Алексей1153++ » Записан
e.o.b.
Гость
« Ответ #10 : 07-07-2004 13:08 » 

А как из файла писать строку в text box? Я пробовал использовать textbox.insert вместе с textbox.update, но что-то ничего не получается.

И по поводу for(; str != null; str = reader.ReadLine())
почему при замене for на while (str != null) {...; str=reader.ReadLine();} я получаю бесконечный цикл.

И еще: почему вообще работает str !=null, если в файле есть строка "", почему она не null?
Записан
e.o.b.
Гость
« Ответ #11 : 07-07-2004 13:12 » new

Как сделать чтобы текс из textbox писался в файл кириллицей, а не краквазяблами?
Записан
Serega
Гость
« Ответ #12 : 08-07-2004 12:42 » 

У всех котролов есть свойство Text
Поставть MSDN :!:, сразу отпадет множество вопросов

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

public string ReadLine();
Return Value
The next line from the input stream, or a null reference if the end of the input stream is reached.

В конструкторе врайтера можно указать кодировку
Код:
public StreamWriter(Stream stream, Encoding encoding);
« Последнее редактирование: 29-11-2007 21:08 от Алексей1153++ » Записан
a1eksey_V
Гость
« Ответ #13 : 02-03-2005 19:08 » 

У меня ReadLine не читает русские символы. Т.е. если в строке есть они, то они просто оттуда выкидываются. Взял пример из MSDN тоже самое. Что делать?

using System;
using System.IO;
public class TextFromFile
{
    private const string FILE_NAME = "MyFile.txt";
    public static void Main(String[] args)
    {
        StreamReader sr = File.OpenText(FILE_NAME);
        String input;
        while ((input=sr.ReadLine())!=null)
        {
            Console.WriteLine(input);
        }
        Console.WriteLine ("The end of the stream has been reached.");
        sr.Close();
    }
}
Записан
xelos
Гость
« Ответ #14 : 02-03-2005 21:43 » 

попробуй попользовать Encoding:
Код:
StreamReader sr;
Encoding enc=Encoding.GetEncoding(1251);
sr=new StreamReader("MyFile.txt",enc);
Записан
Beloruso4ka
Гость
« Ответ #15 : 26-10-2009 21:44 » 

Подскажите, как удалить/заменить строку в файле?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 27-10-2009 04:03 » 

Beloruso4ka, создать новый файл, скопировать туда первую часть старого файла (до новой строки либо уже без строки), дописать строку (если добавление) , дописать вторую часть (без удаляемой строки, если удаляли). Старый файл удалить, новый переименовать как старый
Записан

Beloruso4ka
Гость
« Ответ #17 : 27-10-2009 09:25 » 

Спасибо, эт понятно
Но неужели нет другого варианта???
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 27-10-2009 09:33 » 

НУ почему? Есть. Но они аналогичны этому. Например, считать из файла в буфер, сделать изменения в буфере, сохранить буфер обратно в файл.

А чем вариант не устраивает? Хочется посложней? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 27-10-2009 10:30 » 

Цитата: Beloruso4ka
Но неужели нет другого варианта???
А компьютер с массивами работает только так (хоть в памяти, хоть на диске) Улыбаюсь Как вариант - внутри файлов резервировать место под вставку данных - тогда можно не перезаписывать. (Правда, касается это в основном двоичных файлов, не текстовых).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines