Apakah ada kendala untuk sistem operasi tertentu, yang harus saya ketahui?
Ada banyak duplikat ( 1 , 2 , 3 , 4 , 5 ) dari pertanyaan ini tetapi sudah dijawab beberapa dekade yang lalu. Jawaban yang sangat dipilih dalam banyak pertanyaan ini salah hari ini.
Metode dari lain (QA lama) di .sx
stat.h (wrapper sprintstatf ), menggunakan syscall
tellg () , mengembalikan per definisi posisi tetapi tidak harus byte . Jenis pengembalian tidak
int
.
c++
c++17
filesize
c++-standard-library
Jonas Stein
sumber
sumber
tellg
masalah yang serupa . Satu-satunya yang perlu diganggu adalah yang keempat, dan yang satu itu tidak hebat, karena terlalu banyak membicarakanofstream
, baik dalam pertanyaan maupun jawabannya. Yang ini jauh lebih baik dalam mengungkapkan maksud daripada yang lain (kecuali yang pertama, yang anehnya ditutup).stat(2)
? Apakah sudah terlalu tua atau apa?stat(2)
Ini bukan bagian dari standar bahasa.Jawaban:
<filesystem>
(ditambahkan di C ++ 17) membuat ini sangat mudah .Seperti disebutkan dalam komentar, jika Anda berencana menggunakan fungsi ini untuk memutuskan berapa banyak byte yang akan dibaca dari file, perlu diingat bahwa ...
sumber
std::uintmax_t
akan dapat menyimpan nilai-nilai lebih daristd::size_t
? Jika tidak, mengapa tidak digunakanstd::size_t
, yang bisa dibilang lebih dikenali? +1 pada jawabannya, btwfile_size
pengembalian. Terlihat agak aneh juga bagiku.std::size_t
hanya diperlukan untuk menampung ukuran maksimal dalam objek memori. File bisa jauh lebih besar,size_t
adalah 32 bit, danuintmax_t
64 bit.C ++ 17 menghadirkan
std::filesystem
yang menyederhanakan banyak tugas pada file dan direktori. Tidak hanya Anda dapat dengan cepat mendapatkan ukuran file, atributnya, tetapi juga membuat direktori baru, melakukan iterasi melalui file, bekerja dengan objek jalur.Perpustakaan baru memberi kita dua fungsi yang bisa kita gunakan:
Fungsi pertama adalah fungsi bebas di
std::filesystem
, yang kedua adalah metode masukdirectory_entry
.Setiap metode juga memiliki kelebihan beban, karena dapat memunculkan pengecualian atau mengembalikan kode kesalahan (melalui parameter keluaran). Di bawah ini adalah kode detail yang menjelaskan semua kemungkinan kasus.
sumber