C streamwriter очистить файл
прочитайте файл, удалите строку в памяти и поместите содержимое обратно в файл (перезапись). Если файл большой, вы можете прочитать его строку за строкой и создать временный файл, позже заменив исходный.
на очень большие файлы, я бы сделал что-то вроде этого
обновление я изначально написал это еще в 2009 году и я думал, что это может быть интересно с обновлением. Сегодня вы можете выполнить вышеуказанное, используя LINQ и отложенное исполнение
код выше почти точно такой же, как в первом примере, читая строку за строкой и сохраняя минимальный объем данных в памяти.
A отказ от ответственности может быть в порядке. Поскольку мы говорим о текстовых файлах, вам очень редко придется использовать диск в качестве промежуточного носителя. Если вы не имеете дело с очень большими файлами журналов, не должно быть никаких проблем с чтением содержимого в память и избежать необходимости иметь дело с временным файлом.
отметим, что .ToList имеет решающее значение здесь, чтобы заставить немедленное исполнение. Также обратите внимание, что все примеры предполагают, что текстовые файлы кодируются UTF-8.
- читать весь файл в память (например, File.ReadAllLines )
- удалите оскорбительную строку (в этом случае, вероятно, проще всего преобразовать массив строк в List затем удалить строку)
- напишите все остальные строки назад (например, с File.WriteAllLines ) - потенциально преобразовать List в массив строк снова с помощью ToArray
это означает, что вы должны знать, что у вас есть достаточно памяти, хотя. Альтернатива:
- Откройте как входной файл, так и новый выходной файл (как TextReader / TextWriter , например, File.OpenText и File.CreateText )
- читать строки ( TextReader.ReadLine ) - если вы не хотите удалять его, напишите в выходной файл ( TextWriter.WriteLine )
- когда вы прочитаете все строки, закройте как считыватель, так и писатель (Если вы используете using заявления для обоих, это произойдет автоматически)
- если вы хотите заменить вход на выход, удалите входной файл, а затем переместите выходной файл на место.
я расширил то, что предложил Маркус Олссон, и придумал этот класс, который добавляет несколько строк поиска и пару событий:
чтобы удалить элемент из текстового файла, сначала переместите весь текст в список и удалите нужный элемент. Затем запишите текст, хранящийся в списке, в текстовый файл
Я бы очень просто:
- открыть файл для чтения/записи
- читать / искать через него до начала строки, которую вы хотите удалить
- установите указатель записи на текущий указатель чтения
- прочитайте до конца строки, которую мы удаляем, и пропустите разделители новой строки (считая количество символов, когда мы идем, мы назовем его nline)
- читать байт за байтом и записывать каждый байт в файл
- когда закончите усечь файл до (orig_length-nline).
Привет, ребята, я написал метод удаления строк из файлов. Эта программа использует using System.IO
I have a hardlinked a file, and use File.WriteAllText , it seems as if this sometimes (?) deletes the file since the hardlinks are not kept updated.
I recommend you to do not do that if another operation will access the file right after this operation. I faced issue where the file didn't get closed write after this line of code, and cause IO exceptions of file is in use , so i recommend you to handle it manually through file stream
This is what I did to clear the contents of the file without creating a new file as I didn't want the file to display new time of creation even when the application just updated its contents.
Olive, if it answers your question, would you please mark it as an answer. However, if the proposed solution doesn't work in your case, please let us know even then.
+1 This is the only way to first acquire a file lock, check file attributes safely and finally clear the content.
This is exactly what i needed myself. i need to have a service communicate to an application for simple line-by-line messages to a user, and this allows me to keep my file lock and clear the messages to prevent the service app from inserting and inadvertently dropping messages or duplicating messages.
Wouldn't it be advisable to create the filestream in a using block? That would automatically close the stream as well.
Use FileMode.Truncate everytime you create the file. Also place the File.Create inside a try catch .
The easiest way is:
However, I recommend you use FileStream because the first solution can throw UnauthorizedAccessException
Try using something like
Creates or overwrites a file in the specified path.
Not a good idea for the question asked: Does not remove the data already in the file - it only overwrites it to the length of the new data, so if old data > new data you will end up with mix of the two.
The simplest way to do this is perhaps deleting the file via your application and creating a new one with the same name. in even simpler way just make your application overwrite it with a new file.
There can be problems if you try to create the file shortly after deletion. Sometimes the OS fails to create file as it "thinks" the file still exists.
@Dmitry Lobanov - [I know this is an old thread]. I do not accept that the operating system sometimes thinks a file still exists, unless there is a good reason. It would be a very poor OS if it did. MUCH more likely is that something still has a handle open on the existing file. It could even be your own software if you are not careful in closing files (by using 'using' for example to ensure disposal). Could be the anti-virus too. Agree with your conclusion though. I think FileMode.Truncate is the way to go.
That's because you're creating a StreamWriter , then using File.WriteAllText . Your File is already being accessed with the StreamWriter .
File.WriteAllText does just that, writes the entire string you pass to it to a file. StreamWriter is unnecessary if you're going to use File.WriterAllText .
If you don't care about overwriting an existing file, you can do this:
If you want to use StreamWriter (which, by the way, File.WriteAllText uses, it just hides it), and append to the file, you can do this (from this answer):
Or at that point just delete the method entirely and have the caller call File.WriteAllText directly, because this method accomplishes nothing.
You can use StreamWriter for creating a file for write and use Truncate to write with clearing previous content.
This use FileMode.Truncate
Truncate Specifies that an existing file it to be opened and then truncated so that its size is zero bytes.
Assuming that your file already exists and you want to clear its contents before populating it or whatever, I found the best way to do this with StreamWriter is..
You only need to specify false in the second parameter of the constructor for StreamWriter( route, false )
The problem is with you locking the file by initializing StreamWriter onto filePath and then trying to call File.WriteAllText which also internally attempts to lock the file and eventually end up with an exception being thrown.
Also from what it looks you are trying to clear the file's content and then write something in.
Consider the following:
Why not use FileStream with FileMode.Create ?
Look at the MSDN of FileMode Enum
Create
Specifies that the operating system should create a new file. If the file already exists, it will be overwritten. This requires Write permission. FileMode.Create is equivalent to requesting that if the file does not exist, use CreateNew; otherwise, use Truncate. If the file already exists but is a hidden file, an UnauthorizedAccessException exception is thrown.
Overwritten will cover/remove/clean/delete all existed file data.
if you would like to use StreamWriter , use new StreamWriter(fs) .
Здравствуйте друзья.
--------------------
Есть текстовый файл LogHistory.log в него записывается результат выполнения определеннного действия (журнал).
Через некоторое время там становится очень много данных.
Как мне его програмно очистить этот файл?.
--------------------
С уважением Арсен.
Как програмно очистить ini файл в делфи?
Как полностью очистить ini файл? Вот, что в нем находится: Label Name=Label2 Label Caption=456.
Как очистить текстовый файл от лишних подстрок
Здравствуйте! Есть однострочный текстовый файл file.txt reg add.
Очистить текстовый файл
есть функция сохранения в файл.. int out_file(char* filename,date* cor) < fstream.
Я тоже в начале думал именно так сделать.
Но я хочу для практики сделать именно так как написал выше.
Как можно это будет реализовать?.
A_R_S, можно попробовать так но исходный файл все равно будет удален, правда с вожможностью отката, а потом будет пересоздан из пустого:
FileMode.Truncate указывает на то, что файл должен быть открыт. Но после открытия произойдет "усечение" файла до размера, равного нулю.
Подробнее: msdn
Очистить текстовый файл
Привет всем Подскажите как очистить текстовый файл под 0. Что б по минимуму команд было.
Как програмно 'очистить', удалить все записи из MSFlexGrid?
Как програмно 'очистить', удалить все записи из MSFlexGrid. И еще вопрос. При добавлении записи в.
Текстовый файл UTF-8 сохранить как текстовый файл ANSI
Есть текстовый файл в UTF-8 Нужно рядом сохранить его же, но в ANSI Как сделать это средствами.
Как програмно заархивировать файл?
Если кто-нибудь использовал архивирование файлов из своих программ вышлите пожалуйста пример.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализует TextWriter для записи символов в поток в определенной кодировке.
Методы расширения
Настраивает способ выполнения ожиданий для задач, возвращаемых из асинхронного высвобождаемого объекта.
Свойства
Получает или задает значение, определяющее, будет ли StreamWriter сбрасывать буфер в основной поток после каждого вызова Write(Char).
Получает основной поток, связанный с резервным хранилищем.
Получает кодировку Encoding, в которой осуществляется запись выходных данных.
Возвращает объект, управляющий форматированием.
Возвращает или задает признак конца строки, используемой текущим TextWriter .
Комментарии
StreamWriter предназначен для вывода символов в определенной кодировке, в то время как классы, производные от Stream них, предназначены для ввода и вывода байтов.
StreamWriter по умолчанию используется экземпляр UTF8Encoding , если не указано иное. Этот экземпляр UTF8Encoding создается без метки порядка байтов (BOM), поэтому его GetPreamble метод возвращает пустой массив байтов. Кодировка UTF-8 по умолчанию для этого конструктора создает исключение для недопустимых байтов. Это поведение отличается от поведения, предоставляемого объектом кодирования в свойстве Encoding.UTF8 . Чтобы указать BOM и определить, возникает ли исключение в недопустимых байтах, используйте конструктор, который принимает объект кодирования в качестве параметра, напримерStreamWriter(String, Boolean, Encoding).StreamWriter
По умолчанию потокобезопасный StreamWriter . См TextWriter.Synchronized . сведения о потокобезопасной оболочке.
Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".
Конструкторы
Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя кодировку UTF-8 и размер буфера по умолчанию.
Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера по умолчанию.
Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера.
Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера, а также при необходимости оставляет поток открытым.
Инициализирует новый экземпляр класса StreamWriter для указанного файла с помощью кодировки по умолчанию и размера буфера.
Инициализирует новый экземпляр класса StreamWriter для указанного файла с помощью кодировки по умолчанию и размера буфера. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
Инициализирует новый экземпляр класса StreamWriter для указанного файла с помощью указанной кодировки и размера буфера по умолчанию. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
Инициализирует новый экземпляр класса StreamWriter для указанного файла по заданному пути, используя заданную кодировку и размер буфера. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
Инициализирует новый экземпляр класса для указанного StreamWriter файла, используя указанную кодировку и настроенный с указанным FileStreamOptions объектом.
Инициализирует новый экземпляр класса для указанного StreamWriter файла, используя кодировку по умолчанию и настроенный с указанным FileStreamOptions объектом.
Сохраняет символы новой строки, используемые для данного TextWriter .
Предоставляет StreamWriter без резервного хранилища, в который можно осуществлять запись, но из которого нельзя считывать данные.
Методы
Закрывает текущий объект StreamWriter и базовый поток.
Закрывает текущий модуль записи и освобождает все системные ресурсы, связанные с ним.
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Освобождает все ресурсы, используемые объектом TextWriter.
Принудительно записывает все буферизированные данные в базовый поток, освобождает неуправляемые ресурсы, используемые StreamWriter, а при необходимости — и управляемые ресурсы.
Асинхронно записывает любые буферизованные данные в базовый поток и освобождает неуправляемые ресурсы, используемые StreamWriter.
Асинхронно освобождает все ресурсы, используемые объектом TextWriter.
Определяет, равен ли указанный объект текущему объекту.
Высвобождает ресурсы текущего StreamWriter до их освобождения сборщиком мусора.
Очищает все буферы для текущего средства записи и вызывает запись всех данных буфера в основной поток.
Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.
Асинхронно очищает все буферы текущего средства записи и вызывает запись всех буферизованных данных в базовое устройство.
Служит хэш-функцией по умолчанию.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Возвращает объект Type для текущего экземпляра.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Возвращает строку, представляющую текущий объект.
Записывает текстовое представление значения типа Boolean в текстовый поток.
Записывает символ в поток.
Записывает в поток массив символов.
Записывает в поток дочерний массив символов.
Записывает текстовое представление десятичного значения в текстовый поток.
Записывает в текстовый поток текстовое представление значения с плавающей запятой размером 8 байт.
Записывает в текстовый поток текстовое представление целого числа со знаком размером 4 байта.
Записывает в текстовый поток текстовое представление целого числа со знаком размером 8 байт.
Записывает в текстовый поток текстовое представление объекта с помощью вызова метода ToString для этого объекта.
Записывает диапазон символов в поток.
Записывает диапазон символов в текстовый поток.
Записывает в текстовый поток текстовое представление значения с плавающей запятой размером 4 байта.
Записывает в поток строку.
Записывает форматированную строку в поток, используя ту же семантику, что и метод Format(String, Object).
Записывает форматированную строку в текстовый поток, используя ту же семантику, что и метод Format(String, Object).
Записывает форматированную строку в поток, используя ту же семантику, что и Format(String, Object, Object) метод.
Записывает форматированную строку в текстовый поток, используя ту же семантику, что и метод Format(String, Object, Object).
Записывает форматированную строку в поток, используя ту же семантику, что и метод Format(String, Object, Object, Object).
Записывает форматированную строку в текстовый поток, используя ту же семантику, что и метод Format(String, Object, Object, Object).
Записывает форматированную строку в поток, используя ту же семантику, что и метод Format(String, Object[]).
Записывает форматированную строку в текстовый поток, используя ту же семантику, что и метод Format(String, Object[]).
Записывает построитель строки в текстовый поток.
Записывает в текстовый поток текстовое представление целого числа без знака размером 4 байта.
Записывает в текстовый поток текстовое представление целого числа без знака размером 8 байт.
Асинхронно записывает символ в поток.
Выполняет асинхронную запись символа в текстовый поток.
Выполняет асинхронную запись массива символов в текстовый поток.
Асинхронно записывает дочерний массив символов в поток.
Асинхронно записывает подмассив символов в текстовый поток.
Выполняет асинхронную запись области памяти символов в поток.
Выполняет асинхронную запись области памяти символов в текстовый поток.
Асинхронно записывает строку в поток.
Выполняет асинхронную запись строки в текстовый поток.
Асинхронно записывает построитель строки в текстовый поток.
Записывает признак конца строки в текстовый поток.
Записывает в текстовый поток текстовое представление значения типа Boolean , за которым следует знак конца строки.
Записывает в текстовый поток символ, за которым следует признак конца строки.
Записывает в текстовый поток массив символов, за которыми следует признак конца строки.
Записывает в текстовый поток подмассив символов, за которым следует признак конца строки.
Записывает в текстовый поток текстовое представление десятичного значения, за которым следует знак конца строки.
Записывает в текстовый поток текстовое представление значения с плавающей запятой размером 8 байт, за которым следует признак конца строки.
Записывает в текстовый поток текстовое представление целого числа со знаком размером 4 байта, за которым следует признак конца строки.
Записывает в текстовый поток текстовое представление целого числа со знаком размером 8 байт, за которым следует признак конца строки.
Записывает в текстовый поток текстовое представление объекта путем вызова метода ToString для этого объекта, за которым следует признак конца строки.
Записывает в поток текстовое представление диапазона символов, за которым следует знак конца строки.
Записывает в текстовый поток текстовое представление диапазона символов, за которым следует знак конца строки.
Записывает в текстовый поток текстовое представление значения с плавающей запятой размером 4 байта, за которым следует признак конца строки.
Записывает в поток строку, за которой следует признак конца строки.
Записывает в текстовый поток строку, за которой следует признак конца строки.
Записывает форматированную строку и перенос строки в поток, используя ту же семантику, что и метод Format(String, Object).
Записывает форматированную строку и перенос строки в текстовый поток, используя ту же семантику, что и метод Format(String, Object).
Записывает форматированную строку и перенос строки в поток, используя ту же семантику, что и метод Format(String, Object, Object).
Записывает форматированную строку и перенос строки в текстовый поток, используя ту же семантику, что и метод Format(String, Object, Object).
Записывает форматированную строку и перенос строки в поток, используя ту же семантику, что и Format(String, Object).
Записывает форматированную строку и перенос строки в текстовый поток, используя ту же семантику, что и Format(String, Object).
Записывает форматированную строку и перенос строки в поток, используя ту же семантику, что и Format(String, Object).
Записывает форматированную строку и перенос строки в текстовый поток, используя ту же семантику, что и Format(String, Object).
Записывает в текстовый поток текстовое представление построителя строки, за которым следует знак конца строки.
Записывает в текстовый поток текстовое представление целого числа без знака размером 4 байта, за которым следует признак конца строки.
Записывает в текстовый поток текстовое представление целого числа без знака размером 8 байт, за которым следует признак конца строки.
Асинхронно записывает признак конца строки в поток.
Асинхронно записывает признак конца строки в текстовый поток.
Асинхронно записывает в поток символ, за которым следует признак конца строки.
Асинхронно записывает в текстовый поток символ, за которым следует признак конца строки.
Асинхронно записывает в текстовый поток массив символов, за которым следует признак конца строки.
Асинхронно записывает в поток подмассив символов, за которым следует знак конца строки.
Асинхронно записывает в текстовый поток подмассив символов, за которым следует признак конца строки.
Асинхронно записывает в поток текстовое представление области памяти символов, за которым следует знак конца строки.
Асинхронно записывает в текстовый поток текстовое представление области памяти символов, за которым следует знак конца строки.
Асинхронно записывает в поток строку, за которой следует признак конца строки.
Асинхронно записывает в текстовый поток строку, за которой следует признак конца строки.
Асинхронно записывает в текстовый поток текстовое представление построителя строки, за которым следует знак конца строки.
Явные реализации интерфейса
Описание этого члена см. в разделе Dispose().
Примеры
В следующем примере показано, как использовать StreamWriter объект для записи файла, который перечисляет каталоги на диске C, а затем использует StreamReader объект для чтения и отображения каждого имени каталога. Рекомендуется использовать эти объекты в инструкции using , чтобы неуправляемые ресурсы были правильно удалены. Оператор using автоматически вызывает Dispose объект, когда код, использующий его, завершился. Конструктор, используемый в этом примере, не поддерживается для использования в приложениях магазина Windows.
Читайте также:
- Где в ростове сделать компьютерную томографию легких
- Компьютер не видит токен промсвязьбанк
- Мастеру установки доменных служб active directory не удается преобразовать учетную запись компьютера
- Почему на корпусе компьютера есть напряжение
- Компьютеров часто происходят в самый неподходящий момент и требуют немедленного