If you other tool can wait for the existence of a file, you can use a "lock" file say "C:\Temp\lock.txt"
1) Before Mathematica writes your data, use DeleteFile["C:\\Temp\\lock.txt"]
2) Do all the operations you need.
3) Write one byte to the lock file: 1>>"C:\\Temp\\lock.txt"
.
In the meantime, your other tool is waiting for lock file to appear. A somewhat better protocol:
1) Before Mathematica writes your data, use FileExistsQ["C:\\Temp\\lock.txt"]
to check whether the lock file is there. If so, pause Mathematica for say 10 seconds to give time to the other tool. Loop while the file is there.
2) If the look file has been erased, have Mathematica do the required writing. Once it is done, create the lock file.
3) Rinse and repeat.
My answer above depends on the answer to this question:
Does Mathematica return from a command such as PutAppend
without finishing writing?
I think it does not. I have no access to Mathematica's code, but the following test suggests so:
SetDirectory@$TemporaryDirectory;xx = Table[N[Pi, 50000], {10000}]; ByteCount[xx]
Timing[PutAppend[xx, "eraseme.txt"]; FileByteCount["eraseme.txt"]]
226000080
{56.363161, 519927272}
The byte count of the last command is the correct one (as reported by the OS 3 minutes later).