Sobes.tech
Junior — Middle

Faylın mövcud olmaması halında onun yaradılmasını necə təmin etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

C/C++-da, faylın mövcud olmaması halında onu yaratmağı təmin etmək üçün bir neçə üsul mövcuddur:

  1. POSIX sistem çağırışı open istifadə edərək faylı açarkən O_CREAT | O_EXCL bayrağından istifadə etmək. O_EXCL bayrağı faylın yalnız mövcud olmadığı halda yaradılmasını təmin edir, əks halda çağırış səhvlə nəticələnəcək.
#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("Fayl artıq mövcuddur və ya xəta");
} else {
    // Fayl uğurla yaradıldı
    close(fd);
}
  1. C++ standart kitabxanasında <filesystem> istifadə edərək faylın mövcud olub-olmadığını yoxlamaq və yoxdursa faylı yaratmaq mümkündür (C++17-dən etibarən):
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // fayl yaradıldı
}
  1. C-də əvvəlcə fopen ilə faylın mövcud olub-olmadığını yoxlamaq və əgər tapılmazsa, onu yazma rejimində açmaq olar. Ancaq bu üsul atomik deyil və çox ipli mühitlərdə yarış şəraitinə səbəb ola bilər.

Ən etibarlı üsul isə open funksiyasını O_CREAT | O_EXCL bayraqları ilə istifadə etmək və faylı yalnız mövcud deyilsə atomik şəkildə yaratmaqdır.