C# Language
Файловый и потоковый ввод-вывод
Поиск…
Вступление
Управляет файлами.
Синтаксис
-
new System.IO.StreamWriter(string path)
-
new System.IO.StreamWriter(string path, bool append)
-
System.IO.StreamWriter.WriteLine(string text)
-
System.IO.StreamWriter.WriteAsync(string text)
-
System.IO.Stream.Close()
-
System.IO.File.ReadAllText(string path)
-
System.IO.File.ReadAllLines(string path)
-
System.IO.File.ReadLines(string path)
-
System.IO.File.WriteAllText(string path, string text)
-
System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
-
System.IO.File.Copy(string source, string dest)
-
System.IO.File.Create(string path)
-
System.IO.File.Delete(string path)
-
System.IO.File.Move(string source, string dest)
-
System.IO.Directory.GetFiles(string path)
параметры
параметр | подробности |
---|---|
дорожка | Местоположение файла. |
присоединять | Если файл существует, true добавит данные в конец файла (добавляет), false будет перезаписывать файл. |
текст | Текст, который нужно записать или сохранить. |
содержание | Набор строк для записи. |
источник | Расположение файла, который вы хотите использовать. |
Dest | Место, куда вы хотите файл. |
замечания
- Обязательно закрывайте объекты
Stream
. Это можно сделать сusing
блока, как показано выше, или путем ручного вызоваmyStream.Close()
. - Убедитесь, что текущий пользователь имеет необходимые разрешения на пути, который вы пытаетесь создать файл.
- Строки Verbatim должны использоваться при объявлении строки пути, которая включает обратную косую черту, например:
@"C:\MyFolder\MyFile.txt"
Чтение из файла с использованием класса System.IO.File
Вы можете использовать функцию System.IO.File.ReadAllText для чтения всего содержимого файла в строку.
string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");
Вы также можете прочитать файл как массив строк, используя функцию System.IO.File.ReadAllLines :
string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");
Запись строк в файл с использованием класса System.IO.StreamWriter
Класс System.IO.StreamWriter :
Реализует TextWriter для записи символов в поток в конкретной кодировке.
Используя метод WriteLine
, вы можете писать контент по очереди в файл.
Обратите внимание на использование ключевого слова using
которое гарантирует, что объект StreamWriter будет удален, как только он выйдет из области видимости, и, следовательно, файл будет закрыт.
string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
foreach (string line in lines)
{
sw.WriteLine(line);
}
}
Обратите внимание, что StreamWriter может получить второй параметр bool
в своем конструкторе, позволяя Append
в файл вместо перезаписи файла:
bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
sw.WriteLine("This line will be appended to the existing file");
}
Запись в файл с использованием класса System.IO.File
Вы можете использовать функцию System.IO.File.WriteAllText для записи строки в файл.
string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);
Вы также можете использовать функцию System.IO.File.WriteAllLines, которая получает IEnumerable<String>
как второй параметр (в отличие от одной строки в предыдущем примере). Это позволяет писать контент из массива строк.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
Леной чтение файла по строкам через IEnumerable
При работе с большими файлами вы можете использовать метод System.IO.File.ReadLines
для чтения всех строк из файла в IEnumerable<string>
. Это похоже на System.IO.File.ReadAllLines
, за исключением того, что он не загружает весь файл в память сразу, что делает его более эффективным при работе с большими файлами.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
Второй параметр File.ReadLines является необязательным. Вы можете использовать его, когда требуется указать кодировку.
Важно отметить, что вызов ToArray
, ToList
или другой подобной функции заставит все строки загружаться сразу, что означает, что преимущество использования ReadLines
аннулируется. Лучше всего перечислить IEnumerable
используя цикл foreach
или LINQ, если использовать этот метод.
Создать файл
Статический класс файла
Используя метод Create
File
статического класса File
мы можем создавать файлы. Метод создает файл по заданному пути, в то же время он открывает файл и дает нам FileStream
файла. Убедитесь, что вы закрыли файл после того, как закончите с ним.
EX1:
var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();
ех2:
using(var fileStream1 = File.Create("samplePath"))
{
/// you can write to the fileStream1
}
EX3:
File.Create("samplePath").Close();
Класс FileStream
Есть много перегрузок этого конструктора классов, который на самом деле хорошо документирован здесь . Ниже приведен пример, который охватывает большинство используемых функций этого класса.
var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Вы можете проверить перечисления для FileMode , FileAccess и FileShare из этих ссылок. В основном они означают следующее:
FileMode: ответы «Должен ли файл быть создан? Открыт? Create, если не существует, тогда откройте?» любопытные вопросы.
FileAccess: Ответы «Должен ли я читать файл, писать в файл или и то, и другое?» любопытные вопросы.
FileShare: Ответы «Должны ли другие пользователи читать, писать и т. Д. В файл, пока я использую его одновременно?» любопытные вопросы.
Копировать файл
Статический класс файла
Статический класс File
может быть легко использован для этой цели.
File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Примечание. По этому методу файл копируется, что означает, что он будет считан из источника, а затем записан в путь назначения. Это процесс потребления ресурсов, для определения размера файла потребуется относительное время и может привести к зависанию вашей программы, если вы не используете потоки.
Переместить файл
Статический класс файла
Статический класс файлов можно легко использовать для этой цели.
File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Замечание1: Изменяет только индекс файла (если файл перемещается в том же томе). Эта операция не занимает достаточного времени для размера файла.
Замечание2: Невозможно переопределить существующий файл по пути назначения.
Удалить файл
string path = @"c:\path\to\file.txt";
File.Delete(path);
Хотя Delete
не генерирует исключение, если файл не существует, он будет генерировать исключение, например, если указанный путь недействителен или у вызывающего нет необходимых разрешений. Вы всегда должны обертывать вызовы Delete
внутри блока try-catch и обрабатывать все ожидаемые исключения. В случае возможных условий гонки, оберните логику внутри оператора блокировки .
Файлы и каталоги
Получить все файлы в каталоге
var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);
Возвращает массив FileInfo
, представляющий все файлы в указанном каталоге.
Получить файлы с определенным расширением
var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);
Возвращает массив FileInfo
, представляющий все файлы в указанном каталоге с указанным расширением.
Async записывает текст в файл с помощью StreamWriter
// filename is a string with the full path
// true is to append
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
// Can write either a string or char array
await file.WriteAsync(text);
}