# Generic Files > [HTML Version](genericfiles.htm) These file statements work on all types of files. u **CLOSE** __ **CLOSE #ch** **Parameters** _ch _is the file channel associated with the file when it was opened. **Comments** Closing a file releases any internal locks on it. It has no effect on external locking mechanisms such as XLOCK and FLOCK. All open files are automatically closed at the end of a program. Attempting to explicitly close a file channel which is not open generates ASB error #14 (I/O to unopened file). You can determine if a file channel is open by using the [ERF()](filefunctions.htm.md) function. u **KILL** _Updated July 2015; Comment added_ **KILL fspec** KILL erases/deletes a file. **Parameters** _fspec_ is filespec in native or DevPPN format. If no extension is specified, .DAT is assumed. Terminate the filespec with a dot to erase a file with no extension. **Comments** If the file does not exist, the statement behaves like a null operation—i.e., no error is triggered. So there is no particular need to do a LOOKUP prior to a KILL. u **LOOKUP** __ **LOOKUP fspec, blks** LOOKUP checks for size and existence of a file. **Parameters** _fspec_ is a filespec in native or DevPPN format. Default extension is .DAT. _blks _is a floating point variable which returns the size of the file in "blocks" (512 bytes). Adding further to the confusion of the archaic units, if the file is an exact multiple of 512 bytes, the number of blocks will be reported as a negative value, indicating a "random" file; otherwise it will be a positive number. See [ABSLOOKUP](abslookup.htm.md)[SP](keyword-types.htm.md) to override that behavior. If the file does not exist, the return value is 0. If the file exists but has zero bytes, the return value is 0.5. **See Also** • [LOOKUP](filefunctions.htm.md)