Напишете двоичен файл на C++

Napisete Dvoicen Fajl Na C



В програмирането на C++ работата с двоични файлове е фундаментална за съхраняването и манипулирането на необработените данни. Независимо дали работите с изображения, аудио файлове или персонализирани структури от данни, способността за ефективно записване на двоични файлове е от решаващо значение. Двоичните файлове съхраняват данните във формат, който не е четим от хора, което ги прави подходящи за различни приложения, като например съхраняване на сложни структури, изображения или всякакви данни, които не следват просто текстово представяне.

C++ предоставя библиотеката за взаимодействие с двоични файлове, по-специално класа „ofstream“, за запис на двоични данни. Тази възможност позволява на разработчиците безпроблемно да създават, модифицират и управляват двоичните файлове. Тази статия изследва различните методи и техники за писане на двоични файлове в C++, като хвърля светлина върху техните приложения и случаи на използване.

Напишете двоичен файл с C++

За да запишете данните в двоичен файл с помощта на C++, се използва методът write(). Тази функция записва определен брой байтове в определения поток, започвайки от местоположението на указателя 'put'. Ако показалецът “put” е в края, файлът се разширява. Новите данни обаче презаписват съществуващите знаци, ако указателят е във файла. В случай на грешка по време на процеса на запис, потокът се маркира като в състояние на грешка. Сега нека преминем към примерите, за да научим как да пишем в двоичен файл с помощта на някои прости и вградени в C++ функции.







Метод 1: Записване на двоични файлове със структурирани данни

В много случаи може да се наложи да запишете структурирани данни, като персонализирани структури, в двоичен файл. Нека разгледаме пример, който съдържа запис на човек, който включва името, височината и възрастта на лицето. Вижте следния даден код и погледнете обяснението:



#include

#include

структура Лице {

въглен име [ петдесет ] ;

вътр възраст ;

двойно височина ;

} ;

вътр основен ( ) {

std :: ofstream outFile ( 'people.bin' , std :: ios :: двоичен ) ;

ако ( ! outFile. е отворено ( ) ) {

std :: cerr << 'Грешка! Не може да се отвори файл за запис!' << std :: endl ;

връщане 1 ;

}

Лице person1 = { 'Калсум Иляс' , 25 , 1,75 } ;

Лице person2 = { 'Kalsoom Bajwa' , 30 , 1,68 } ;

outFile. пишете ( reinterpret_cast < въглен *> ( и човек 1 ) , размер на ( човек 1 ) ) ;

outFile. пишете ( reinterpret_cast < въглен *> ( и човек2 ) , размер на ( човек2 ) ) ;

outFile. близо ( ) ;

std :: cout << „Записът на лицето е записан успешно в двоичен файл.“ << std :: endl ;

връщане 0 ;

}

Ето разбивка на кода с конкретни подробности. Програмата започва с дефиниране на персонализирана структура, наречена 'Person'. Има три полета: име, възраст и ръст. Подробностите за тези полета са както следва:



  • име: Низ за съхраняване на името на лицето (до 50 знака)
  • възраст: Цяло число за съхраняване на възрастта на лицето
  • височина: Двойник за съхранение на височината на човека

След дефиниране на структурата 'Person' стартира основната функция, която е входната точка на програмата. Първият ред в главната програма отваря файл с име „people.bin“. Използваме „std::ofstream“, за да създадем файл с име „people.bin“ за запис на данните в двоичен формат. Проверката дали файлът се отваря успешно е много важна. В противен случай се показва съобщение за грешка и програмата спира. Следователно с помощта на условието “if” и функцията is_open() проверяваме дали файлът е отворен успешно или не.





Тук се създават двата обекта 'Person'. Ние дефинираме две променливи, “person1” и “person2”, от тип “Person”. Присвояваме името на променливата, възрастта и стойностите на височината за „Kalsoom Ilyas“ и „Kalsoom Bajwa“.

Сега, когато имаме данните за запис в двоичен файл, нека изпълним действителната функция с функцията write(). Използваме “outFile.write”, за да запишем съдържанието на всеки обект “Person” във файла. „reinterpret_cast(&person1)“ и „reinterpret_cast(&person2)“ преобразуват цялата структура „Person“ (включително всички нейни полета) в непрекъснат поток от байтове, който е подходящ за запис в двоичен файл . Записваме размера на всеки обект „Person“, като използваме „sizeof(person1)“ и „sizeof(person2)“, за да гарантираме, че всички данни са написани правилно.



След като запишете данните във файла, е много важно да го затворите правилно, така че никакви данни да не се загубят поради друга функция. Използваме outFile.close(), за да освободим ресурсите, които са свързани с файла, и да гарантираме, че данните са написани точно. Накрая отпечатваме съобщение, което потвърждава успешното записване на данните в двоичния файл.

Ако обясним този пример с по-прости думи, представете си специална тетрадка, която може да съхранява информация за хора само на таен език. Този код създава план за организиране на информацията (име, възраст, височина). Отваря бележника, попълва профилите на двама души, превежда информацията на тайния език и я записва спретнато вътре. След това затваря сигурно бележника, като запазва профилите за бъдеща употреба. Обърнете се към изхода на програмата, който е даден в следната моментна снимка:

Метод 2: Записване на цели числа в двоичен файл

При този метод масив от цели числа се записва в двоичен файл с име „integers.bin“. “reinterpret_cast” третира целочисления масив като поредица от знаци (байтове) за запис във файла. Това е особено важно, тъй като двоичните файлове работят със сурови байтови данни. Нека да разгледаме следния прост пример:

#include

#include

вътр основен ( ) {

std :: ofstream outFile ( 'integers.bin' , std :: ios :: двоичен ) ;

ако ( ! outFile. е отворено ( ) ) {

std :: cerr << 'Грешка! Не може да се отвори файл за запис!' << std :: endl ;

връщане 1 ;

}

вътр числа [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. пишете ( reinterpret_cast < въглен *> ( числа ) , размер на ( числа ) ) ;

outFile. близо ( ) ;

std :: cout << „Дадените цели числа са записани успешно в двоичен файл.“ << std :: endl ;

връщане 0 ;

}

Ето разбивка на кода с конкретни подробности:

“#include ” и “#include ” въвеждат необходимите инструменти за работа с файлове и отпечатване на съобщения като cin и write(), съответно. „std::ofstream outFile(„integers.bin“, std::ios::binary);“ отваря двоичен файл с име „integers.bin“, който може да съхранява числата само в таен код (двоичен формат). Проверява дали файлът е отворен. В противен случай се дава съобщение за грешка.

Следващият ред, който е „int numbers[] = {42, 99, -1, 0};“ дефинира масив с име „numbers“ с цели числа 42, 99, -1 и 0. „outFile.write(reinterpret_cast(numbers), sizeof(numbers));“ внимателно превежда целите числа в двоичен формат и ги записва във файла “integer.bin”. „outFile.close();“ затваря файла правилно, за да запази целите числа безопасни и организирани. Накрая се отпечатва съобщение за потвърждение, че целите числа са били успешно съхранени в двоичния файл. Обърнете се към следния изход на тази програма, за да видите резултата:

Заключение

Писането на двоични файлове на C++ е решаващо умение за ефективна работа с различните типове данни. В това изследване на писането на двоични файлове в C++ научихме как класът „ofstream“ може да се използва за ефективна обработка на двоичните данни. Независимо дали се работи с прости цели числа или структурирани данни, използващи потребителски структури, процесът включва отваряне на файлов поток, запис на данните в двоичен формат и след това затваряне на файла. Тази възможност предоставя на разработчиците на C++ гъвкавостта да работят с разнообразна гама от двоични типове данни, допринасяйки за гъвкавостта на езика в приложения, които варират от програмиране на системно ниво до мултимедийна обработка.