I/O Aliran dan File

I/O (masukan/keluaran) aliran dan file mengacu pada transfer data baik ke atau dari media penyimpanan. Di .NET, namespace layanan System.IO berisi jenis yang memungkinkan pembacaan dan penulisan, baik secara sinkron maupun asinkron, pada file dan aliran data. Namespace layanan ini juga berisi jenis yang melakukan kompresi dan dekompresi pada file, dan jenis yang memungkinkan komunikasi melalui pipa dan port serial.

File adalah kumpulan byte berurutan dan bernama yang memiliki penyimpanan persisten. Saat menangani file, Anda menangani jalur direktori, penyimpanan disk, serta nama direktori dan file. Sebaliknya, aliran adalah urutan byte yang dapat Anda gunakan sebagai asal pembacaan dan tujuan penulisan ke penyimpanan cadangan, yang dapat menjadi salah satu dari beberapa media penyimpanan (misalnya, disk atau memori). Sama seperti ada beberapa penyimpanan cadangan selain disk, ada juga beberapa jenis aliran selain aliran file, seperti jaringan, memori, dan aliran pipa.

File dan direktori

Anda dapat menggunakan jenis di namespace layanan System.IO untuk berinteraksi dengan file dan direktori. Misalnya, Anda bisa mendapatkan dan mengatur properti untuk file dan direktori, dan mengambil kumpulan file dan direktori berdasarkan kriteria pencarian.

Untuk konvensi penamaan jalur dan cara untuk mengekspresikan jalur file untuk sistem Windows, termasuk dengan sintaks perangkat DOS yang didukung di .NET Core 1.1 dan yang lebih baru dan .NET Framework 4.6.2 dan yang lebih baru, lihat Format jalur file pada sistem Windows.

Berikut adalah beberapa kelas file dan direktori yang umum digunakan:

  • File - menyediakan metode statik untuk membuat, menyalin, menghapus, memindahkan, dan membuka file, dan membantu membuat objek FileStream.

  • FileInfo - menyediakan metode instans untuk membuat, menyalin, menghapus, memindahkan, dan membuka file, dan membantu membuat objek FileStream.

  • Directory - menyediakan metode statik untuk membuat, memindah, dan melakukan enumerasi melalui direktori dan subdirektori.

  • DirectoryInfo - menyediakan metode instans untuk membuat, memindah, dan melakukan enumerasi melalui direktori dan subdirektori.

  • Path - menyediakan metode dan properti untuk memproses string direktori dengan cara lintas platform.

Anda harus selalu memberikan penanganan pengecualian yang kuat saat memanggil metode filesystem. Untuk mengetahui informasi selengkapnya, lihat Menangani kesalahan I/O.

Selain menggunakan kelas-kelas ini, pengguna Visual Basic dapat menggunakan metode dan properti yang disediakan oleh kelas Microsoft.VisualBasic.FileIO.FileSystem untuk I/O file.

Lihat Petunjuk: Menyalin Direktori, Petunjuk: Membuat Daftar Direktori, dan Petunjuk: Menghitung Direktori dan File.

Aliran

Kelas dasar abstrak Stream mendukung pembacaan dan penulisan byte. Semua kelas yang mewakili aliran mewarisi dari kelas Stream. Kelas Stream dan kelas turunannya memberikan tampilan umum sumber data dan repositori, dan mengisolasi programmer dari detail spesifik sistem operasi dan perangkat yang mendasar.

Aliran melibatkan tiga operasi fundamental:

  • Baca - mentransfer data dari aliran ke dalam struktur data, seperti larik byte.

  • Tulis - mentransfer data ke aliran dari sumber data.

  • Cari - membuat kueri dan memodifikasi posisi saat ini dalam aliran.

Bergantung pada sumber data atau repositori yang mendasarinya, aliran mungkin hanya mendukung sebagian kemampuan ini. Misalnya, kelas PipeStream tidak mendukung pencarian. Properti CanRead, CanWrite, dan CanSeek pada aliran menentukan operasi yang didukung aliran.

Berikut adalah beberapa kelas aliran yang umum digunakan:

  • FileStream – untuk membaca dan menulis ke file.

  • IsolatedStorageFileStream – untuk membaca dan menulis ke file di penyimpanan terisolasi.

  • MemoryStream – untuk membaca dan menulis ke memori sebagai penyimpanan cadangan.

  • BufferedStream – untuk meningkatkan performa operasi baca dan tulis.

  • NetworkStream – untuk membaca dan menulis melalui soket jaringan.

  • PipeStream – untuk membaca dan menulis melalui pipa yang dinamai dan pipa anonim.

  • CryptoStream – untuk menautkan aliran data ke transformasi kriptografis.

Untuk contoh saat bekerja dengan aliran secara asinkron, lihat I/O File Asinkron.

Pembaca dan penulis

Namespace layanan System.IO juga menyediakan jenis untuk membaca karakter yang dikodekan dari aliran dan menulisnya ke aliran. Biasanya, aliran dirancang untuk input dan output byte. Jenis pembaca dan penulis menangani konversi karakter yang dikodekan ke dan dari byte sehingga aliran dapat menyelesaikan operasi. Setiap kelas pembaca dan penulis dikaitkan dengan aliran, yang dapat diambil melalui properti kelas BaseStream.

Berikut adalah beberapa kelas pembaca dan penulis yang umum digunakan:

  • BinaryReader dan BinaryWriter – untuk membaca dan menulis jenis data primitif sebagai nilai biner.

  • StreamReader dan StreamWriter – untuk membaca dan menulis karakter dengan menggunakan nilai pengodean untuk mengubah karakter ke dan dari byte.

  • StringReader dan StringWriter – untuk membaca dan menulis karakter ke dan dari string.

  • TextReader dan TextWriter – berfungsi sebagai kelas dasar abstrak untuk pembaca dan penulis lain yang membaca dan menulis karakter dan string, bukan data biner.

Lihat Petunjuk: Membaca Teks dari File, Petunjuk: Menulis Teks ke File, Petunjuk: Membaca Karakter dari String, dan Petunjuk: Menulis Karakter ke String.

Operasi I/O asinkron

Membaca atau menulis data dalam jumlah besar dapat mengonsumsi banyak sumber daya. Anda harus melakukan tugas-tugas ini secara asinkron jika Anda ingin aplikasi tetap responsif terhadap pengguna. Dengan operasi I/O sinkron, alur UI diblokir hingga operasi intensif sumber daya selesai. Gunakan operasi I/O asinkron saat mengembangkan aplikasi Microsoft Store Windows 8.x untuk mencegah terciptanya kesan bahwa aplikasi Anda telah berhenti berfungsi.

Anggota asinkron berisi Async dalam nama mereka, seperti metode CopyToAsync, FlushAsync, ReadAsync, dan WriteAsync. Anda menggunakan metode-metode ini dengan kata kunci async dan await.

Untuk mengetahui informasi selengkapnya, lihat I/O File Asinkron.

Kompresi

Pemadatan mengacu pada proses pengurangan ukuran file untuk penyimpanan. Dekompresi adalah proses mengekstrak isi file terkompresi sehingga mereka berada dalam format yang dapat digunakan. Namespace layanan System.IO.Compression berisi jenis berikut untuk mengompresi dan mendekompresi file dan aliran.

Kelas-kelas berikut sering digunakan saat mengompresi dan mendekompresi file dan aliran:

  • ZipArchive – untuk membuat dan mengambil entri dalam arsip zip.

  • ZipArchiveEntry – untuk mewakili file terkompresi.

  • ZipFile – untuk membuat, mengekstrak, dan membuka paket terkompresi.

  • ZipFileExtensions – untuk membuat dan mengekstrak entri dalam paket terkompresi.

  • DeflateStream – untuk mengompres dan mendekompresi aliran menggunakan algoritma Deflate.

  • GZipStream – untuk mengompres dan mendekompresi aliran dalam format data gzip.

Lihat Petunjuk: Mengompres dan Mengekstrak File.

Penyimpanan terisolasi

Penyimpanan terisolasi adalah mekanisme penyimpanan data yang memberikan isolasi dan keamanan dengan mendefinisikan cara standar dalam mengaitkan kode dengan data yang disimpan. Penyimpanan menyediakan sistem file virtual yang diisolasi oleh pengguna, perakitan, dan (secara opsional) domain. Penyimpanan terisolasi berguna khususnya ketika aplikasi Anda tidak memiliki izin untuk mengakses file pengguna. Anda dapat menyimpan pengaturan atau file untuk aplikasi Anda dengan cara yang dikontrol oleh kebijakan keamanan komputer.

Penyimpanan terisolasi tidak tersedia untuk aplikasi Microsoft Store Windows 8.x; sebagai gantinya, gunakan kelas data aplikasi di namespace layanan Windows.Storage. Untuk mengetahui informasi selengkapnya, lihat Data aplikasi.

Kelas-kelas berikut sering digunakan saat menerapkan penyimpanan terisolasi:

Lihat Penyimpanan Terisolasi.

Operasi I/O di aplikasi Microsoft Store Windows

.NET untuk aplikasi Microsoft Store Windows 8.x berisi banyak jenis untuk membaca dan menulis ke stream; namun, set ini tidak menyertakan semua jenis I/O .NET.

Beberapa perbedaan penting yang perlu diperhatikan saat menggunakan operasi I/O di aplikasi Microsoft Store Windows 8.x:

Anda dapat mengonversi antara aliran .NET Framework dan aliran Runtime Windows, jika diperlukan. Untuk mengetahui informasi selengkapnya, lihat Petunjuk: Mengonversi Antara Aliran .NET Framework dan Aliran Runtime Windows atau WindowsRuntimeStreamExtensions.

Untuk mengetahui informasi selengkapnya operasi I/O di aplikasi Microsoft Store Windows 8.x, lihat Mulai Cepat: Membaca dan menulis file.

I/O dan keamanan

Saat menggunakan kelas di namespace layanan System.IO, Anda harus mengikuti persyaratan keamanan sistem operasi seperti daftar kontrol akses (ACL) untuk mengontrol akses ke file dan direktori. Persyaratan ini di luar persyaratan FileIOPermission apa pun. Anda dapat mengelola ACL secara terprogram. Untuk mengetahui informasi selengkapnya, lihat Petunjuk: Menambahkan atau Menghapus Entri Daftar Kontrol Akses.

Kebijakan keamanan default mencegah aplikasi Internet atau intranet mengakses file di komputer pengguna. Oleh karena itu, jangan gunakan kelas I/O yang memerlukan jalur ke file fisik saat menulis kode yang akan diunduh melalui internet atau intranet. Sebagai gantinya, gunakan penyimpanan terisolasi untuk aplikasi .NET.

Pemeriksaan keamanan dilakukan hanya saat aliran dibangun. Oleh karena itu, jangan membuka aliran dan kemudian meneruskannya ke domain aplikasi atau kode yang kurang tepercaya.

  • Tugas I/O Umum
    Menyediakan daftar tugas I/O yang terkait dengan file, direktori, dan aliran, serta tautan ke konten dan contoh yang relevan untuk setiap tugas.

  • I/O File Asinkron
    Menjelaskan keunggulan performa dan operasi dasar I/O asinkron.

  • Penyimpanan Terisolasi
    Menjelaskan mekanisme penyimpanan data yang memberikan isolasi dan keamanan dengan mendefinisikan cara standar dalam mengaitkan kode dengan data yang disimpan.

  • Pipa
    Menjelaskan operasi pipa yang dinamai dan bernama di .NET.

  • File yang Dipetakan Memori
    Menjelaskan file yang dipetakan memori, yang berisi konten file pada disk dalam memori virtual. Anda dapat menggunakan file yang dipetakan memori untuk mengedit file yang sangat besar dan membuat memori bersama untuk komunikasi selama proses.