SD Card - how to reduce the power consumption?

Look at the html for documentation of the classes. Also look at the SdFat examples.

I suggest you use sync() as opposed to opening and closing your log file. sync() does all the operations of close() but leaves the file open and positioned for the next write. You can power off the logger and all data will be saved, provided you are not in the middle of a write to the file.

Here is a simple example of a logger that writes a line number and the time in millis() to a file every second.

#include <SdFat.h>

// Replace SS with the chip slect pin for your SD.
const uint8_t sdChipSelect = SS;

// SD file system.
SdFat sd;

// Log file.
SdFile file;

void setup() {
Serial.begin(9600);
// Initialize the SD and create or open the data file for append.
if (!sd.begin(sdChipSelect)
|| !file.open("DATA.CSV", O_CREAT | O_WRITE | O_APPEND)) {
// Replace this with somthing for your app.
Serial.println(F("SD problem"));
while(1);
}
}

uint32_t n = 0;
uint32_t t = 0;

void loop() {
// delay one second between points
t += 1000;
while (millis() < t);

// Write your data here
file.print(n++);
file.print(',');
file.println(t);

// Use sync instead of close.
file.sync();
}

This is the file produced by the above logger:

0,1000
1,2000
2,3000
3,4000
4,5000
5,6000
6,7000
7,8000
8,9000
9,10000
10,11000
11,12000