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
Молодой специалист
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
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #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 » |
|
Как сделать чтобы текс из 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 » |
|
Подскажите, как удалить/заменить строку в файле?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 27-10-2009 04:03 » |
|
Beloruso4ka, создать новый файл, скопировать туда первую часть старого файла (до новой строки либо уже без строки), дописать строку (если добавление) , дописать вторую часть (без удаляемой строки, если удаляли). Старый файл удалить, новый переименовать как старый
|
|
|
Записан
|
|
|
|
Beloruso4ka
Гость
|
|
« Ответ #17 : 27-10-2009 09:25 » |
|
Спасибо, эт понятно Но неужели нет другого варианта???
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #19 : 27-10-2009 10:30 » |
|
Но неужели нет другого варианта??? А компьютер с массивами работает только так (хоть в памяти, хоть на диске) Как вариант - внутри файлов резервировать место под вставку данных - тогда можно не перезаписывать. (Правда, касается это в основном двоичных файлов, не текстовых).
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
|