Transactional handling of text files on Windows Transactional handling of text files on Windows windows windows

Transactional handling of text files on Windows


How about using NTFS file streams? Write multiple named(numbered/timestamped) streams to the same Filename. Every version could be stored in a different stream but is actually stored in the same "file" or bunch of files, preserving the data and providing a roll-back mechanism...when you reach a point of certainty delete some of the previous streams.

Introduced in NT 4? It covers all versions. Should be crash proof you will always have the previous version/stream plus the original to recover / roll-back to.

Just a late night thought.

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa364404%28v=vs.85%29.aspx


What you are asking for is transactionality, which is not possible without developing yourself the mechanism of a RDBMS database according to your requirements:

"It is very important not to corrupt the content of these files during file IO"

Pickup a DBMS.


See a related post Accessing a single file with multiple threadsHowever my opinion is to use a database like Raven DB for these kind of transactions, Raven DB supports concurrent access to same file as well as supporting batching on multiple operations into a single request. However everything is persisted as JSON documents, not text files. It does support .NET/C# very well, including Javascript and HTML but not Delphi.