Hocam dosya kendi oluşuyor benim programım da ama bu dosya değişedebiliyor. Sadece kontrol eden kod lazım. Eğer değişiyorsa bir fonksiyonu çalıştıracak. Eğer değişmiyorsa sürekli kontrol edecek. Bu kodu verirseniz sevinirim çünkü js yeni başladım pek bilgim yok.Eğer dosyaya kendin yazıyorsan buna gerek yok, fs modülüyle yazma işleminden sonra async-await kullanarak, dosyanın yazma işlemi bittikten sonra istediğini yaptırırsın.
Eğer dosyaya başkası müdahale edecekse sanırım burada kodu paylaşılmış: NodeJS detect modified files
Hocam dosya duruma göre bazen değişiyor bazen değişmiyor. Bunu 3 saniyede 1 kontrol etsin sadece. Çok zor bişey değil. c# olsa yapmıştım çoktan. Sadece js de kodu ne bilmiyorum.Ne yapmayı hedefliyorsun?
Programının oluşturduğu dosya'yı, yine kendi programın değiştirdiğinde bir şeyler yapmak istiyorsan, bunu direkt dosyaya yazdığın yerde yapmalısın.
Hocam dosya duruma göre bazen değişiyor bazen değişmiyor. Bunu 3 saniyede 1 kontrol etsin sadece. Çok zor bişey değil. c# olsa yapmıştım çoktan. Sadece js de kodu ne bilmiyorum.
Haa tamam. Program dosyayı değiştirmiyor. Sürekli güncelini oluşturuyor ve bu oluşturma olayını js yapmıyor c++ dan yazılan bir programı js ile indirtip çalıştırtıyorum.Ama benim soruma cevap vermedin ki, kafandaki çözüme odaklanmışsın biraz. (bkz. X-Y Problemi)
Dosyayı değiştiren şey, senin programın dışında bir şey olamaz diye tahmin ediyorum.
Senin anlattıklarından anladığım kadarıyla senin programın da bazen bu dosyayı değiştiriyor.
Neden değiştirdiği yerde yapman gerekeni yapamıyorsun?
Hocam sağolun araştırmanız için ama o txt dosyasının içeriğini bilmiyorum. Değişebilir ve ya değişmeyebilir.Diğer bir konunda da bahsetmiştim. Dosyayı belli bir saniye tekrarında sürekli okursun. Eğer önceki değer ile okuduğun değer aynı değilse değişmiştir demektir.
Bunu biraz araştırayım dedin ve karşıma fs.watchFile çıktı. Adamlar zaten bunu implemente etmiş. Dediğim mantıkta çalışıyor. Ama performanstan dolayı önermiyorlar.
Bunun yerine fs.watch kullanın diyor. Neden bunu önerdiklerini merak edip bakayım dedim. Anladığım kadarıyla fs.watch direkt işletim sistemi komutu çalıştırıyor. Her işletim sisteminde dosya ve dizin değişikliğini izleyen bir komut bulunuyor anladığım kadarıyla. Bunu kullanarak yapıyorlar.
Yani lafın kısası fs.watch fonksiyonu ile dosya değişikliğini yakalayıp istediğin kod bloğunu çalıştırabilirsin.
Kaynak
Tam olarak bunun kodunu yazabilir misiniz hocam?Eğer önceki değer ile okuduğun değer aynı değilse değişmiştir demektir.
const fs = require('fs');
let data;
const hedefdosya = '../test.txt';
setInterval(() => {
fs.access(hedefdosya, fs.constants.F_OK, (err) => {
if (err) return;
if (!data) data = fs.readFileSync(hedefdosya, 'utf8');
let fileData = fs.readFileSync(hedefdosya, 'utf8');
if (data !== fileData) {
data = fileData;
// do something
}
});
}, 3000);
const fs = require('fs');
const hedefdosya = '../test.txt';
setInterval(() => {
fs.access('file.txt', fs.constants.F_OK, (err) => {
if (err) fs.copyFileSync(hedefdosya, 'file.txt');
const data = fs.readFileSync(hedefdosya, 'utf8');
const data2 = fs.readFileSync('file.txt', 'utf8');
if (data === data2) {
console.log('Dosya aynı');
} else {
fs.writeFileSync('file.txt', data);
console.log('Dosya değiştirildi');
// do something
}
});
}, 3000);
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.