Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
[NODE JS] fs.existsSync ile Dosya Varlığı Kontrolü
Selam arkadaşlar. Dosya veya klasörün var olup olmadığını kontrol etmek çok temel bir ihtiyaç. Config dosyası var mı, upload klasörü oluşturulmuş mu, geçici dosya hala duruyor mu gibi sorulara cevap almak için fs.existsSync kullanıyoruz. Basit bir fonksiyon ama doğru kullanmayı bilmek gerekiyor.
existsSync ve Alternatifler
fs.existsSync senkron olarak bir dosya veya klasörün var olup olmadığını kontrol eder ve boolean döndürür. Asenkron versiyonu olan fs.exists deprecated (kullanımdan kaldırılmış) çünkü callback paternine uymuyordu. Asenkron kontrol için fs.access veya try-catch ile fs.stat kullanmanız önerilir.
Şimdi önemli bir nokta var: existsSync ile kontrol edip sonra işlem yapmak arasında dosya silinebilir veya oluşturulabilir. Buna race condition denir. Ben genellikle dosyanın varlığını kontrol etmek yerine doğrudan işlemi yapıp hata yakalamayı tercih ediyorum. Ama basit senaryolarda existsSync gayet yeterli.
JavaScript:
// === fs.existsSync ile VARLIK KONTROLÜ ===
const fs = require('fs');
const path = require('path');
// Test dosyaları oluştur
const testDosya = path.join(__dirname, 'varlik-test.txt');
const testKlasor = path.join(__dirname, 'varlik-klasor');
fs.writeFileSync(testDosya, 'test', 'utf-8');
fs.mkdirSync(testKlasor, { recursive: true });
// 1. Temel varlık kontrolü
console.log('=== existsSync ===');
console.log('Dosya var mı:', fs.existsSync(testDosya)); // true
console.log('Klasör var mı:', fs.existsSync(testKlasor)); // true
console.log('Olmayan var mı:', fs.existsSync('/olmayan/yol')); // false
// 2. Koşullu dosya oluşturma
function dosyaYoksaOlustur(yol, varsayilanIcerik = '') {
if (!fs.existsSync(yol)) {
fs.writeFileSync(yol, varsayilanIcerik, 'utf-8');
console.log(`Oluşturuldu: ${path.basename(yol)}`);
return true;
}
console.log(`Zaten var: ${path.basename(yol)}`);
return false;
}
dosyaYoksaOlustur(testDosya, 'varsayılan içerik');
const yeniDosya = path.join(__dirname, 'yeni-dosya.txt');
dosyaYoksaOlustur(yeniDosya, 'yeni dosya içeriği');
fs.unlinkSync(yeniDosya);
// 3. Config dosyası yükleme paterni
function configYukle(configYolu) {
const varsayilanConfig = {
port: 3000,
host: 'localhost',
debug: false,
logSeviyesi: 'info'
};
if (fs.existsSync(configYolu)) {
try {
const icerik = fs.readFileSync(configYolu, 'utf-8');
const yuklenen = JSON.parse(icerik);
console.log('Config dosyadan yüklendi');
return { ...varsayilanConfig, ...yuklenen };
} catch (hata) {
console.error('Config okunamadı, varsayılan kullanılıyor');
return varsayilanConfig;
}
}
console.log('Config dosyası yok, varsayılan kullanılıyor');
// Varsayılan config'i dosyaya kaydet
fs.writeFileSync(configYolu, JSON.stringify(varsayilanConfig, null, 2));
console.log('Varsayılan config kaydedildi');
return varsayilanConfig;
}
const configDosya = path.join(__dirname, 'test-config.json');
const config = configYukle(configDosya);
console.log('Config:', config);
fs.unlinkSync(configDosya);
// 4. fs.access ile asenkron kontrol (modern yaklaşım)
async function erisimKontrol(yol) {
try {
await fs.promises.access(yol, fs.constants.F_OK);
return true; // Dosya var
} catch {
return false; // Dosya yok
}
}
async function detayliKontrol(yol) {
const kontroller = {
var: fs.constants.F_OK,
okunabilir: fs.constants.R_OK,
yazilabilir: fs.constants.W_OK,
calistirilabilir: fs.constants.X_OK
};
const sonuclar = {};
for (const [isim, bayrak] of Object.entries(kontroller)) {
try {
await fs.promises.access(yol, bayrak);
sonuclar[isim] = true;
} catch {
sonuclar[isim] = false;
}
}
return sonuclar;
}
detayliKontrol(testDosya).then(sonuc => {
console.log('\nDetaylı kontrol:', sonuc);
});
// 5. Uygulama başlangıç kontrolleri
function baslangicKontrolleri() {
const gerekliDizinler = [
path.join(__dirname, 'logs'),
path.join(__dirname, 'uploads'),
path.join(__dirname, 'uploads', 'temp'),
path.join(__dirname, 'cache')
];
const gerekliDosyalar = [
{ yol: '.env', aciklama: 'Ortam değişkenleri' },
{ yol: 'package.json', aciklama: 'Proje konfigürasyonu' }
];
console.log('\n=== Başlangıç Kontrolleri ===');
// Dizin kontrolleri
gerekliDizinler.forEach(dizin => {
if (!fs.existsSync(dizin)) {
fs.mkdirSync(dizin, { recursive: true });
console.log(` [OLUŞTURULDU] ${path.relative(__dirname, dizin)}/`);
} else {
console.log(` [MEVCUT] ${path.relative(__dirname, dizin)}/`);
}
});
// Dosya kontrolleri
gerekliDosyalar.forEach(({ yol, aciklama }) => {
const tamYol = path.join(__dirname, yol);
const var_mi = fs.existsSync(tamYol);
console.log(` [${var_mi ? 'OK' : 'EKSIK'}] ${yol} (${aciklama})`);
});
// Temizlik
gerekliDizinler.forEach(d => {
try { fs.rmSync(d, { recursive: true }); } catch {}
});
}
baslangicKontrolleri();
// Temizlik
fs.unlinkSync(testDosya);
fs.rmdirSync(testKlasor);
Dosya varlığı kontrolü basit ama her projede gerekli. existsSync hızlı kontroller için ideal, asenkron senaryolarda fs.access tercih edin, ve race condition riskini aklınızda tutun. Kolay gelsin.
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
Çalışıyor
[Python] Target Damage Source
- Cevaplar
- 28
- Görüntüleme
- 4K
- Cevaplar
- 2
- Görüntüleme
- 391
- Cevaplar
- 3
- Görüntüleme
- 330
- Cevaplar
- 1
- Görüntüleme
- 36
