Sobes.tech
Junior — Middle

Fayl mavjud bo'lmaganda uni yaratishni qanday ta'minlash mumkin?

sobes.tech AI

AIdan javob

C/C++ da fayl mavjud bo'lmagan taqdirda uni yaratishni ta'minlash uchun bir nechta usullar mavjud:

  1. POSIX tizim chaqiruvi open yordamida faylni ochishda O_CREAT | O_EXCL flagidan foydalanish. O_EXCL flagi fayl faqat mavjud bo'lmagan taqdirda yaratilishini kafolatlaydi, aks holda chaqiriq xato bilan yakunlanadi.
#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 allaqachon mavjud yoki xato");
} else {
    // Fayl muvaffaqiyatli yaratildi
    close(fd);
}
  1. C++ standarti kutubxonasida <filesystem> yordamida fayl mavjudligini tekshirish va agar mavjud bo'lmasa, faylni yaratish mumkin (C++17 dan boshlab):
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // fayl yaratildi
}
  1. C tilida avval fopen yordamida fayl mavjudligini tekshirish mumkin, va agar fayl topilmasa, yozish rejimida ochish mumkin. Ammo bu usul atomik emas va ko'p ipli muhitlarda raqobat shartlariga olib kelishi mumkin.

Shuning uchun, eng ishonchli usul — open ni O_CREAT | O_EXCL flaglari bilan ishlatish va fayl faqat mavjud bo'lmagan taqdirda atomik tarzda yaratishdir.