
Reece Dunn wrote:
John Maddock wrote:
It seems that testing for a path "J:/foo/bar" on a Win98 or Win2000 machine (unsure which ATM) that doesn't have a J: drive is returning true falsely here because you ain't catching the correct error. Now, I have to say I don't agree with this policy of JM's, but suspect that the actual error is ERROR_INVALID_DRIVE. Will get back to you when my testers get back to me.
I'm not sure I agree with that policy either: that's why there's a comment in the code that it may not be correct. The basic problem is we don't know which error codes represent "file does not exist", as opposed to some other error. The fact there is no documentation on which error codes that API can return makes the problem particularly tricky
I agree that it could potentially return any error code, but according to the Windows documentation, the correct way of dealing with errors is to say:
if( !SomeAPIThatMayFail( ... )) { DWORD error = GetLastError(); // Process error based on values from winerror.h }
Sorry, John. That wasn't meant to be flaimbait :) Hi, Reece. I've little knowledge of the "right way" here, but the code in question does exactly what you suggest. It's just that it "plays God" a little and decides that only some errors are real errors. If the error isn't recognised then it tells the caller that all is well. Given that my code is of the form if (exists(path) && is_directory(path)) ... exists(path) returns true ATM causing is_directory(path) to throw_exception when it can't find path. Given that I'm not using exceptions in this code, I'd rather it lied conservatively rather than optimistically, if you get what I mean... The cure to my immediate problem is to have the actual error that my user is experiencing added to the list of known errors. My intuition tells me to expect ERROR_INVALID_DRIVE but I know we shouldn't write code based on intuition :) I'll post back the actual error as and when my bug reporter gets back to me with the results from a modified version of the code. (I got it to throw_exception instead of return true.) It strikes me that a useful addition to the code here would be to get the code to output a debug message indicating the (uncoded for but probably valid) error code. Regards, Angus