Bagikan melalui


I/O File dan Streaming

File dan streaming I/O (input/output) mengacu pada transfer data baik ke atau dari media penyimpanan. Di .NET, System.IO namespace berisi jenis yang memungkinkan pembacaan dan penulisan, baik secara sinkron maupun asinkron, pada aliran data dan file. Namespace 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 yang diurutkan dan dinamai yang memiliki penyimpanan persisten. Saat bekerja dengan file, Anda bekerja dengan jalur direktori, penyimpanan disk, serta nama file dan direktori. Sebaliknya, stream adalah urutan byte yang dapat Anda gunakan untuk membaca dari serta menulis ke penyimpanan pendukung, yang dapat menjadi salah satu dari beberapa medium penyimpanan seperti disk atau memori. Sama seperti ada beberapa penyimpanan pendukung selain disk, ada beberapa jenis stream selain stream file, seperti stream jaringan, stream memori, dan stream pipa.

File dan direktori

Anda dapat menggunakan tipe di System.IO namespace untuk berinteraksi dengan file dan direktori. Misalnya, Anda bisa mendapatkan dan mengatur properti untuk file dan direktori, dan mengambil koleksi 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 dalam .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 statis untuk membuat, menyalin, menghapus, memindahkan, dan membuka file, dan membantu membuat FileStream objek.

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

  • Directory - menyediakan metode statis untuk membuat, memindahkan, dan menghitung melalui direktori dan subdirektori.

  • DirectoryInfo - menyediakan metode instans untuk membuat, memindahkan, dan menghitung melalui direktori dan subdirektori.

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

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

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

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

Sungai

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

Aliran melibatkan tiga operasi mendasar:

  • Membaca - mentransfer data dari aliran ke dalam struktur data, seperti array byte.

  • Menulis - mentransfer data ke aliran dari sumber data.

  • Mencari - menanyakan dan memodifikasi posisi saat ini dalam aliran data.

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

Berikut adalah beberapa kelas stream yang umum digunakan:

  • FileStream – untuk membaca dan menulis ke file.

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

  • MemoryStream – untuk membaca dan menulis pada 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 anonim dan bernama.

  • CryptoStream – untuk menautkan aliran data ke transformasi kriptografi.

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

Pembaca dan penulis

Namespace System.IO juga menyediakan tipe-tipe untuk membaca karakter yang dikodekan dari stream dan menulisnya ke stream. Biasanya, aliran dirancang untuk input dan output byte. Tipe pembaca dan penulis menangani konversi karakter yang dikodekan dari dan ke byte sehingga aliran data dapat menyelesaikan operasi. Setiap kelas pembaca dan penulis terkait dengan aliran data, yang dapat diakses melalui properti BaseStream kelas.

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 agar dapat mengonversi karakter dari dan ke 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, tetapi bukan data biner.

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

Operasi I/O asinkron

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

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

Untuk informasi selengkapnya, lihat I/O File Asinkron.

Kompresi

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

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 mengompresi dan mendekompresi aliran menggunakan algoritma Deflate.

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

Lihat Cara: Mengompresi dan Mengekstrak File.

Penyimpanan terisolasi

Penyimpanan terisolasi adalah mekanisme penyimpanan data yang menyediakan isolasi dan keamanan dengan mendefinisikan cara terstandarisasi untuk mengaitkan kode dengan data yang disimpan. Penyimpanan menyediakan sistem berkas virtual yang diisolasi berdasarkan pengguna, rakitan, dan (opsional) domain. Penyimpanan terisolasi sangat berguna 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 isolasi tidak tersedia untuk aplikasi Windows 8.x Store; sebagai gantinya, gunakan kelas data aplikasi di namespace Windows.Storage. Untuk informasi selengkapnya, lihat Data aplikasi.

Kelas berikut sering digunakan saat menerapkan penyimpanan terisolasi:

Lihat Penyimpanan Terisolasi.

Operasi I/O di aplikasi Windows Store

.NET pada aplikasi Windows 8.x Store berisi banyak tipe untuk membaca dari dan menulis ke stream; namun, set ini tidak mencakup semua tipe I/O .NET.

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

Anda dapat mengonversi antara aliran .NET Framework dan aliran Windows Runtime, jika perlu. Untuk informasi selengkapnya, lihat Cara: Mengonversi Antara .NET Framework Streams dan Windows Runtime Streams atau WindowsRuntimeStreamExtensions.

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

I/O dan keamanan

Saat Anda menggunakan kelas di System.IO namespace layanan, Anda harus mengikuti persyaratan keamanan sistem operasi seperti daftar kontrol akses (ACL) untuk mengontrol akses ke file dan direktori. Persyaratan ini di samping persyaratan lainnya FileIOPermission. Anda dapat mengelola ACL secara terprogram. Untuk informasi selengkapnya, lihat Cara: 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 dibuat. Oleh karena itu, jangan membuka aliran dan kemudian meneruskannya ke kode atau domain aplikasi yang kurang tepercaya.

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

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

  • Penyimpanan Terisolasi
    Menjelaskan mekanisme penyimpanan data yang menyediakan isolasi dan keamanan dengan menentukan cara terstandarisasi untuk mengaitkan kode dengan data yang disimpan.

  • Pipa
    Menjelaskan operasi saluran anonim dan bernama di .NET.

  • Memory-Mapped File
    Menjelaskan file yang dipetakan ke 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 antarproseksi.