Q30608: In QB.EXE, Save with "Too Many Files" Erases Source File
Article: Q30608 Product(s): See article Version(s): 4.00 4.00b Operating System(s): MS-DOS Keyword(s): ENDUSER | buglist4.00 buglist4.00b fixlist4.50 B_BasicCom | mspl13_basic Last Modified: 21-NOV-1988 When running in the QB.EXE editor, if a program opens all available DOS file handles and an error message such as "Division by Zero" appears, a subsequent Save command in the editor erases the file and the message "Too Many Files" is displayed. Microsoft has confirmed this to be a problem in QuickBASIC Versions 4.00 and 4.00b, and in the QuickBASIC that accompanies the Microsoft BASIC Compiler Versions 6.00 and 6.00b for MS-DOS and OS/2 (buglist6.00, buglist6.00b). This problem was corrected in QuickBASIC Version 4.50. This problem does not occur in QuickBASIC Versions 2.00, 2.01, and 3.00. You can work around this problem by doing either of the following two things: 1. Issuing a CLOSE from the immediate window to free file handles before saving the program 2. Performing a Selected Print from the file menu (ALT+F+P) before saving. Because DOS preallocates five file handles, only 15 are available for program use. (This occurs when you boot your DOS with the FILES=20 statement in your DOS CONFIG.SYS file.) If a program terminates abnormally, these file handles may stay allocated to QuickBASIC, as in the example program below. Performing Shell or Save from the File menu in QB.EXE then fails when attempting to open the twenty-first file handle, as in the following example : 1. Executing a Shell command from the File menu displays the following message: "Illegal Function Call" 2. Executing a Save command from the File menu displays the following message and erases the file: "Too Many Files" Please note that Shell can be used as a test to determine if you have run out of file handles. If Shell is successful, you can Save freely without deleting the file. The following steps reproduce the problem: 1. Boot with FILES=20 in your DOS CONFIG.SYS file. 2. Run the following program (a "Divide By Zero" error message appears): FOR k = 1 TO 15 OPEN "file" + STR$(k) FOR RANDOM AS #k NEXT k m = 0 PRINT 1 / m 3. Try to Save from the File menu in QB.EXE. A "Too Many Files" error message will appear. 4. The program file is now erased and cannot be reopened in QB.EXE.
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.