I need to know if my program can write files to the disk (HDD, floppy, flash, CD) from where it is running. I have tried something like:
{$I-} Rewrite(myFile); {$I+} Result:= (IOResult = 0);
The problem is that if the disk is read-only, Windows gives me an error message telling me that
‘appName.exe – Write Protect Error The disk cannot be written to because it is write protected. Please remove the write protection from the volume USB_BOOT in drive D:. Cancel TryAgain Continue’
How can I test for write access without raising any error/warning messages? Thanks.
Edit:
Ok. The ‘bug’ has nothing to do with the above mentioned piece of code. I only thought that it appears there. I move the code to the read-only disk and ran it from there. The bug appears in a function called ‘CreateShortcutEx’, on this line:
MyPFile.Save(PWChar(WFileName),False);
MyPFile is declared like this:
var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; ..... end;
So, why is MyPFile trying to write to the application’s drive (the one that is read-only) if the WFileName parameter is ‘C:\documents and settings\bla bla’ ?
Call the Windows API SetErrorMode() function to disable the error message box.
Edit:
I just tried, and this:
works as expected.