[HELP] how to create a new log file every day without erase any one?

Hello arduino user, I’m new user in this forum,
Right now, I have project to create water Data Logger based on arduino, and the output file is txt . and my problem is how to create a new log file txt every hour

Hope you can help me, greetings to all

I do apreciate your help, thanks before, and sorry for my bad English.

here is my full code

#include <Wire.h> 
#include <SD.h> 
#include <SPI.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>

RTC_DS1307 rtc;    // Create a RealTimeClock object

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// which pin to use for reading the sensor? can use any pin!

const int chipSelect = 10;

// count how many pulses!

volatile uint16_t pulses = 0;
// track the state of the pulse pin
volatile uint8_t lastflowpinstate;
// you can try to keep time of how long it is between pulses
volatile uint32_t lastflowratetimer = 0;
// and use that to calculate a flow rate
volatile float flowrate;
// Interrupt is called once a millisecond, looks for any pulses from the sensor!
  uint8_t x = digitalRead(FLOWSENSORPIN);
  if (x == lastflowpinstate) {
    return; // nothing changed!
  if (x == HIGH) {
    //low to high transition!
  lastflowpinstate = x;
  flowrate = 1000.0;
  flowrate /= lastflowratetimer;  // in hertz
  lastflowratetimer = 0;

void useInterrupt(boolean v) {
  if (v) {
    // Timer0 is already used for millis() - we'll just interrupt somewhere
    // in the middle and call the "Compare A" function above
    OCR0A = 0xAF;
    TIMSK0 |= _BV(OCIE0A);
  } else {
    // do not call the interrupt function COMPA anymore
    TIMSK0 &= ~_BV(OCIE0A);

void setup() {
   rtc.begin(); // Start the RTC library code
   //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
   Serial.println("Flow sensor test!");
   lcd.begin(16, 2);
   Serial.println("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
   pinMode(10, OUTPUT);
   if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
  lcd.setCursor(0, 1);
   digitalWrite(FLOWSENSORPIN, HIGH);
   lastflowpinstate = digitalRead(FLOWSENSORPIN);

void loop()                     // run over and over again
  //lcd.setCursor(0, 0);  
  // perhitungan debit air
  // Sensor Frequency (Hz) = 7.5 * Q (Liters/min)
  // Liters = Q * time elapsed (seconds) / 60 (seconds/minute)
  // Liters = (Frequency (Pulses/second) / 7.5) * time elapsed (seconds) / 60
  // Liters = Pulses / (7.5 * 60)
  float liters = pulses;
  liters /= 10;
  liters /= 60.0;

  lcd.setCursor(0, 1);
  lcd.print(" Liter");
  //Serial.println(" Liters");

  // Logging data to memori sd card//
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
        DateTime now = rtc.now();  
        dataFile.print(now.day(), DEC);
        dataFile.print(now.month(), DEC);
        dataFile.print(now.year(), DEC);
        dataFile.print(now.hour(), DEC);
        dataFile.print(now.minute(), DEC);
        dataFile.print(now.second(), DEC);

So, you'd want some code to read the RTC, about once a minute, millis() should work for that, and check for a change of hour. To do that you could have saved the current hour in a variable, as read from the RTC. When the hour changes, use the hour change to write and append to a new file as well as update the current hour variable. Writing code to detect the current hour and detecting the hour change would be a good place to start.

you'd want some code to read the RTC, about once a minute, millis() should work for that

I don't see where millis() comes into it when the OP has an RTC. Read the hour from the RTC each time through loop() and when it changes create a new output file