I really wonder why I had no problems with it before.
Well, if this piece of snippet is from TP 5.5 it's from 1989. Back in the MS-DOS days you had a utility SHARE.EXE which would handle file locks. The loading of SHARE.EXE was voluntary so if you didn't use it, you probably could open the file multiple times, regardless of FileMode, and it would all still work.
But when converting old TP code it's always best to see if there are alternatives for such functions.
So it's best that you use
FileExists() instead of your Exist(). I also saw your ShortS(). You could use
Trim() in SysUtils for that. (so just remove those functions from your program and see where the compiler gives you errors and use the new functions there)
One final note... although you check for the existence of the file before you open (or create) it... it's always best to handle errors. Even though in your case these errors don't present themselves doesn't mean they never will on other systems. So use {$I-}, {$I+} and IOResult around
all rewrite and reset calls and handle the error accordingly.