The snippet in #1 can not cause memory leaks, though it is not really prepared to handle error situations.
The snippet in #3 is not that bad neither, though it mixes the Cleanup Stack into the picture, and possible leaves. If a leave occurs there, the file and session may get leaked, depending on how your method really looks like (RBuf8 handling happens before everything else, or in the middle of the code).
This is why this discussion does not make any sense, since it is about some theoretical code and not the real one.
If you want to use the Cleanup Stack, you should use it everywhere (so CleanupClosePushL RFs and RFile too), and use LeaveIfError with RFile::Open, and use RBuf8::CreateL instead of Create.
And it is not clear why you think there is a leak. If it is in the emulator and you get an ALLOC panic, use HookLogger and you will see where the leak is. If it is about UHEAP macros, note that they can not track extension of the Cleanup Stack. If you run out of memory on the device, the problem is probably somewhere else, or at least in some lines you have not shown yet.
For the question about pushing the fs and file:
While typing this code, I have noticed the missing () from fsSession.Close. If it is really missing in your code, that can be the reason.
RFile file ;
// RBuf8 DataBuffer ; // this is having some data but i didnt mention here which i write in file
RFs fsSession ;
// fsSession.Close ;
CleanupStack::PopAndDestroy(2); // file, fsSession