Junior — Middle
Ինչպես կարող եք ապահովել ֆայլի ստեղծումը միայն այն դեպքում, երբ այն բացակայում է?
sobes.tech AI
Պատասխան AI-ից
C/C++-ում հնարավոր է ապահովել ֆայլի ստեղծումը միայն այն դեպքում, երբ այն դեռ չի գոյություն ունենում, մի քանի եղանակով՝
- Օգտագործելով
O_CREAT | O_EXCLնշանըopenհամակարգային կանչի ժամանակ (POSIX):O_EXCLնշանը երաշխավորում է, որ ֆայլը կստեղծվի միայն այն դեպքում, եթե այն դեռ չի գոյություն ունենում, հակառակ դեպքում կանչը կավարտվի սխալով:
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int fd = open("file.txt", O_CREAT | O_EXCL | O_WRONLY, 0644);
if (fd == -1) {
perror("Ֆայլը արդեն գոյություն ունի կամ սխալ");
} else {
// Ֆայլը հաջողությամբ ստեղծվեց
close(fd);
}
- C++ ստանդարտ գրադարանում կարող եք ստուգել ֆայլի գոյությունը
<filesystem>-ի միջոցով (C++17-ից սկսած) և ստեղծել ֆայլը, եթե այն չկա:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// ֆայլը ստեղծվեց
}
- C-ում նախ կարող եք ստուգել ֆայլի գոյությունը
fopen-ով ռեժիմով ընթերցման, և եթե ֆայլը չի գտնվել, բացել այն գրելու ռեժիմով: Բայց այս մոտեցումը չի էթիկական և կարող է հանգեցնել մրցակցության պայմանների բազմասխալային միջավայրում:
Ամենավստահելի միջոցը open-ը օգտագործել O_CREAT | O_EXCL նշաններով՝ ֆայլը ստեղծելու միայն այն դեպքում, երբ այն դեռ չի գոյություն ունենում, և դա անել էթիկականորեն՝ որպես միատոմիկ գործողություն։