probleem with esp8266 to saving data

hello guys. this is my code

 //https://github.com/kalanda/esp8266-sniffer/blob/master/src/main.ino

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>

SoftwareSerial GPS(4,15);
TinyGPSPlus gps;

File myFile;

extern "C" {
  #include <user_interface.h>
}
String wififile,gpsfile;

#define DATA_LENGTH           112

#define TYPE_MANAGEMENT       0x00
#define TYPE_CONTROL          0x01
#define TYPE_DATA             0x02
#define SUBTYPE_PROBE_REQUEST 0x04


struct RxControl {
signed rssi:8; // signal intensity of packet
unsigned rate:4;
unsigned is_group:1;
unsigned:1;
unsigned sig_mode:2; // 0:is 11n packet; 1:is not 11n packet;
unsigned legacy_length:12; // if not 11n packet, shows length of packet.
unsigned damatch0:1;
unsigned damatch1:1;
unsigned bssidmatch0:1;
unsigned bssidmatch1:1;
unsigned MCS:7; // if is 11n packet, shows the modulation and code used (range from 0 to 76)
unsigned CWB:1; // if is 11n packet, shows if is HT40 packet or not
unsigned HT_length:16;// if is 11n packet, shows length of packet.
unsigned Smoothing:1;
unsigned Not_Sounding:1;
unsigned:1;
unsigned Aggregation:1;
unsigned STBC:2;
unsigned FEC_CODING:1; // if is 11n packet, shows if is LDPC packet or not.
unsigned SGI:1;
unsigned rxend_state:8;
unsigned ampdu_cnt:8;
unsigned channel:4; //which channel this packet in.
unsigned:12;
};

struct SnifferPacket{
    struct RxControl rx_ctrl;
    uint8_t data[DATA_LENGTH];
    uint16_t cnt;
    uint16_t len;
};

static void showMetadata(SnifferPacket *snifferPacket) {

  unsigned int frameControl = ((unsigned int)snifferPacket->data[1] << 8) + snifferPacket->data[0];

  uint8_t version      = (frameControl & 0b0000000000000011) >> 0;
  uint8_t frameType    = (frameControl & 0b0000000000001100) >> 2;
  uint8_t frameSubType = (frameControl & 0b0000000011110000) >> 4;
  uint8_t toDS         = (frameControl & 0b0000000100000000) >> 8;
  uint8_t fromDS       = (frameControl & 0b0000001000000000) >> 9;

  char addr[] = "00:00:00:00:00:00";
  getMAC(addr, snifferPacket->data, 10);
  Serial.println(addr);

  //Serial.print(";");
  //Serial.print(snifferPacket->rx_ctrl.rssi, DEC);

  Serial.println (String(gps.date.year()) + '/' + String(gps.date.month()) + '/' + String(gps.date.day()) + ';' + String(gps.time.hour()) + ':' + String(gps.time.minute()) + ':' + String(gps.time.second()) + ';' + String(gps.location.lat(), 6) + ';' + String(gps.location.lng(), 6) + ';' + String(gps.speed.kmph()));
  wififile= "4W" + String(gps.date.month()) + '-' + String(gps.date.day()) + ".txt";
 
    myFile = SD.open(wififile, FILE_WRITE);
    myFile.println(String(gps.date.year()) + '/' + String(gps.date.month()) + '/' + String(gps.date.day()) + ';' + String(gps.time.hour()) + ':' + String(gps.time.minute()) + ':' + String(gps.time.second()) + ';' + String(addr) + ';' + String(snifferPacket->rx_ctrl.rssi, DEC) + ';' + String(gps.location.lat(), 6) + ';' + String(gps.location.lng(), 6) + ';' + String(gps.speed.kmph()) );
    myFile.close();
  
}

/***Callback for promiscuous mode***/
static void ICACHE_FLASH_ATTR sniffer_callback(uint8_t *buffer, uint16_t length) {
  struct SnifferPacket *snifferPacket = (struct SnifferPacket*) buffer;
  showMetadata(snifferPacket);
}

static void printDataSpan(uint16_t start, uint16_t size, uint8_t* data) {
  for(uint16_t i = start; i < DATA_LENGTH && i < start+size; i++) {
    Serial.write(data[i]);
  }
}

static void getMAC(char *addr, uint8_t* data, uint16_t offset) {
  sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", data[offset+0], data[offset+1], data[offset+2], data[offset+3], data[offset+4], data[offset+5]);
}

#define CHANNEL_HOP_INTERVAL_MS   1000
static os_timer_t channelHop_timer;

/***Callback for channel hoping***/
void channelHop()
{
  // hoping channels 1-14
  uint8 new_channel = wifi_get_channel() + 1;
  if (new_channel > 14)
    new_channel = 1;
  wifi_set_channel(new_channel);
}

#define DISABLE 0
#define ENABLE  1

void setup() {
  // set the WiFi chip to "promiscuous" mode aka monitor mode
  Serial.begin(115200);
  GPS.begin(9600);
  SD.begin(15);
  delay(3000);
  wifi_set_opmode(STATION_MODE);
  wifi_set_channel(1);
  wifi_promiscuous_enable(DISABLE);
  delay(10);
  wifi_set_promiscuous_rx_cb(sniffer_callback);
  delay(10);
  wifi_promiscuous_enable(ENABLE);

  // setup the channel hoping callback timer
  os_timer_disarm(&channelHop_timer);
  os_timer_setfn(&channelHop_timer, (os_timer_func_t *) channelHop, NULL);
  os_timer_arm(&channelHop_timer, CHANNEL_HOP_INTERVAL_MS, 1);
}

void loop()
{
  smartDelay(1000);
}

static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (GPS.available())
      gps.encode(GPS.read());
  } while (millis() - start < ms);
}

I want to save Wi-Fi and GPS data in the SD module, now data is not save to the sdcard(8GB), but i can only see data into the arduino program.

I want this data to be stored in the memory card…

Where did i go wrong?pls help me

If you try the Datalogger example from the SD library (after selecting the correct CS pin) does it work?
You do SD.begin but do not bother to check if it worked okay.