Article: Q192304
Product(s): Microsoft FoxPro
Version(s): WINDOWS:5.0,5.0a,6.0
Operating System(s):
Keyword(s):
Last Modified: 14-AUG-1999
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual FoxPro for Windows, versions 5.0, 5.0a, 6.0
-------------------------------------------------------------------------------
SUMMARY
=======
One way to check if a program is able to write to a drive is to attempt to
create a temporary file on the drive. However, under Windows NT, this opens a
system error dialog box if the drive is write-protected or otherwise not
available to be written. This article demonstrates how to create and use the
CheckMediaWrite() function to check if the drive is available for writing.
MORE INFORMATION
================
Using the SetErrorMode Win32 API function, a program can attempt to create a
temporary file on a drive without raising an error on Windows NT if the drive is
not available for writing.
Save the following code to a program file, place a write-protected disk in the
floppy drive, and run the program.
Sample Code
-----------
*-- Code begins here.
CLEAR
*-- Check if floppy drive a: is available for writing
*-- and print the results. Try this twice, once with
*-- a write-protected floppy and again with a floppy
*-- that is not write-protected.
? CheckMediaWrite("a:")
*-----------------------------------------------------------------
*- Function: CheckMediaWrite
*- Summary: Checks if the passed drive is available for writing.
*- Parameters: lsDrive - The drive to check.
*- Returns: -1 If drive cannot be written to.
*- Example: liReturn = CheckWrite("a:")
*-----------------------------------------------------------------
FUNCTION CheckMediaWrite()
PARAMETERS lsDrive
*-- Defines from Winbase.h
#DEFINE SEM_FAILCRITICALERRORS 0x0001
#DEFINE SEM_NOGPFAULTERRORBOX 0x0002
#DEFINE SEM_NOALIGNMENTFAULTEXCEPT 0x0004
#DEFINE SEM_NOOPENFILEERRORBOX 0x8000
*-- Check that the parameter is in the correct format.
IF SUBSTR(lsDrive, 2, 1) <> ":" OR ;
(ASC(UPPER(SUBSTR(lsDrive, 1, 1))) < 65 OR ;
ASC(UPPER(SUBSTR(lsDrive, 1, 1))) > 90)
=MESSAGEBOX("Drive must be in the format <drive letter>:", ;
0, "Error")
RETURN -1
ENDIF
*-- SetErrorMode determines whether the system handles
*-- serious errors or whether the program handles them.
DECLARE INTEGER SetErrorMode IN win32api INTEGER
*-- SetErrorMode returns to what the flags were last set.
*-- You need to store this in lnResult so that you can set them
*-- back the way they were before calling SetErrorMode.
*-- Failure to do so can produce unpredictable results
*-- when encountering future errors. SetErrorMode only
*-- applies to the current process and therefore only affects
*-- the FoxPro program that called SetErrorMode.
lnResult = SetErrorMode(SEM_FAILCRITICALERRORS)
hFile = FCREATE(lsDrive + "\tmp.txt")
IF hFile <> -1
FCLOSE(hFile)
ERASE(lsDrive + "\tmp.txt")
ENDIF
*-- Put things back the way you found them.
lnResult = SetErrorMode(lnResult)
RETURN hFile
*-- Code ends here.
A -1 appears on the desktop.
REFERENCES
==========
(c) Microsoft Corporation 1998. All Rights Reserved. Contributions by Mike A.
Stewart, Microsoft Corporation.
Additional query words: kbVFp600 kbVFp500a kbVFp500 kbAPI
======================================================================
Keywords :
Technology : kbVFPsearch kbAudDeveloper kbVFP500 kbVFP600 kbVFP500a
Version : WINDOWS:5.0,5.0a,6.0
Issue type : kbhowto
=============================================================================