Sobes.tech
Junior — Middle

Ինչպես կարող եք ապահովել ֆայլի ստեղծումը միայն այն դեպքում, երբ այն բացակայում է?

sobes.tech AI

Պատասխան AI-ից

C/C++-ում հնարավոր է ապահովել ֆայլի ստեղծումը միայն այն դեպքում, երբ այն դեռ չի գոյություն ունենում, մի քանի եղանակով՝

  1. Օգտագործելով 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);
}
  1. C++ ստանդարտ գրադարանում կարող եք ստուգել ֆայլի գոյությունը <filesystem>-ի միջոցով (C++17-ից սկսած) և ստեղծել ֆայլը, եթե այն չկա:
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // ֆայլը ստեղծվեց
}
  1. C-ում նախ կարող եք ստուգել ֆայլի գոյությունը fopen-ով ռեժիմով ընթերցման, և եթե ֆայլը չի գտնվել, բացել այն գրելու ռեժիմով: Բայց այս մոտեցումը չի էթիկական և կարող է հանգեցնել մրցակցության պայմանների բազմասխալային միջավայրում:

Ամենավստահելի միջոցը open-ը օգտագործել O_CREAT | O_EXCL նշաններով՝ ֆայլը ստեղծելու միայն այն դեպքում, երբ այն դեռ չի գոյություն ունենում, և դա անել էթիկականորեն՝ որպես միատոմիկ գործողություն։