Do I need delays in my code to wait for SD card operations to safely complete?

I have recently started getting rid of delay(); statements, and replacing them with short sleeps while waiting for sensor conversions so I can read them. But I have noticed in debugging that this causes clipping in my serial output, because the MCU goes to sleep before it finishes booting out the serial communications. I have fixed this with serial.flush(); statements before the sleeping.

My question is: is this kind of thing also a problem for SD card writing?

Not knowing if I would have the same "clipping problem" or not, I have a bunch of delay statements in place after my SD card writing events, for example:

file.open(FileName, O_RDWR | O_AT_END);
file.print(F("Vcc after new file created: "));file.println(Vcc2);
file.close();
delay(100); //wait till file is really closed?

Can safely I put the MCU to sleep right after the file.close(); event? If not how long should I wait to be safe?

Can safely I put the MCU to sleep right after the file.close(); event? If not how long should I wait to be safe?

No delay is needed, the data is safely in the SD card when SdFat or SD.h returns. The card may still be programming flash but the data will be save unless you remove power from the card.

Here is the statement from the SD spec:

After a data block has been received, the card will respond with a data-response token. If the data block has been received without errors, it will be programmed.

I wait for and check the response token before returning from a print or write.