• Note to both write and read sequential and random access files, we need
a file name for the Open statement. To ensure accuracy and completeness, it is
suggested that common dialog boxes be used to get this file name information from
the user. I’ll provide you with a couple of code segments that do just that.
Both segments assume you have a common dialog box on your form named cdlFiles,
with the
CancelError property set equal to True. With
this property True, an error is generated by Visual Basic when the user presses
the Cancel button in the dialog box. By trapping this error, it allows an elegant
exit from the dialog box when canceling the operation is desired.
•The
code segment to obtain a file name (MyFileName with default extension Ext) for
opening a file to read is:
Dim MyFileName As String, Ext As String
.
.
cdlFiles.Filter = "Files (*." + Ext + ")|*." + Ext
cdlFiles.DefaultExt = Ext
cdlFiles.DialogTitle = "Open File"
cdlFiles.Flags = cdlOFNFileMustExist + cdlOFNPathMustExist
On Error GoTo No_Open
cdlFiles.ShowOpen
MyFileName = cdlFiles.filename
.
.
Exit Sub
No_Open:
Resume ExitLIne
ExitLine:
Exit Sub
End Sub
A few words on what’s going on here. First, some properties
are set such that only files with Ext (a three letter string variable) extensions
are displayed (Filter property), the default extension is Ext (DefaultExt property),
the title bar is set (DialogTitle property), and some Flags are set to insure
the file and path exist (see Appendix II for more common dialog flags).
Error trapping is enabled to trap the Cancel button. Finally,
the common dialog box is displayed and the filename property returns with the
desired name. That name is put in the string variable MyFileName. What you do
after obtaining the file name depends on what type of file you are dealing with.
For sequential files, you would open the file, read in the information, and close
the file. For random access files, we just open the file here. Reading and writing
to/from the file would be handled elsewhere in your coding.
•The code segment to retrieve a file name (MyFileName)
for writing a file is:
Dim MyFileName As String, Ext As String
.
.
cdlFiles.Filter = "Files (*." + Ext + ")|*." + Ext
cdlFiles.DefaultExt = Ext
cdlFiles.DialogTitle = "Save File"
cdlFiles.Flags = cdlOFNOverwritePrompt + cdlOFNPathMustExist
On Error GoTo No_Save
cdlFiles.ShowSave
MyFileName = cdlFiles.filename
.
.
Exit Sub
No_Save:
Resume ExitLine
ExitLine:
Exit Sub
End Sub
Note this code is essentially the same used for an Open file
name. The Flags property differs slightly. The user is prompted if a previously
saved file is selected for overwrite. After obtaining a valid file name for a
sequential file, we would open the file for output, write the file, and close
it. For a random access file, things are trickier.
If we want to save the file with the same name we opened it
with, we simply close the file. If the name is different, we must open a file
(using a different number) with the new name, write the complete random access
file, then close it. Like I said, it’s trickier.
•We use both of these code segments in the final example
where we write and read sequential files.