Node.JS dosya kontrol ettirme

behzat_c

Hectopat
Katılım
28 Kasım 2020
Mesajlar
897
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
JavaScript'te masaüstündeki txt dosyasının içindeki değerin değişip değişmediğini kontrol ettiren kodu gönderebilir misiniz? Teşekkürler.
 
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
 
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 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.
 
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.
 
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.
 
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.

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?
 
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?
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.
 
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
 
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
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.

Eğer önceki değer ile okuduğun değer aynı değilse değişmiştir demektir.
Tam olarak bunun kodunu yazabilir misiniz hocam?
 
JavaScript:
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);
Uygulamanın her yeniden başlatılışında 'data' değişkeni sıfırlanacağı için 'do something' bulunan blok tekrar çalışacak. Bu şekilde olmasını istemiyorsan uygulamanın bulunduğu klasöre dosyanın kopyasını oluşturup onunla karşılaştırabilirsin. Örnek kod:
JavaScript:
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);
 

Geri
Yukarı