Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * 260 cAlternate As String * 14 End Type Public Const INVALID_HANDLE_VALUE = -1 '文件不存在时系统返回的常量 Public WFH As WIN32_FIND_DATA Public Declare Function FindFirstFile Lib "Kernel32" Alias "FindFirstFileA" _ (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long '检查一个文件是否存在,若存在返回 true,不存在返回 false Public Function IsFileExist(filename As String) As Boolean Dim sfiles As Long sfiles = FindFirstFile(filename, WFH) If sfiles = INVALID_HANDLE_VALUE Then IsFileExist = False Else IsFileExist = True End If End Function'下面这个函数从对话框取回文件名,返回类型变体 '返回文件名有几种情况:1.空 '2.返回已存在的文件名,不过会询问是否覆盖,所以当返回这种文件,就覆盖了 '返回错误,表示取消 Public Function OpenDigForSaveFile(DigFileName As String) As Variant
'显示文件对话框 打开文件,为打开文件做前期工作 With Form1.FDlg ... ... (相关设置) Do .filename = DigFileName .ShowSave .filename = LTrim(RTrim(.filename)) '判定文件是否存在,若存在则询问是否覆盖(也可以改成报警) If IsFileExist(.filename) = True Then Ucho = MsgBox(" 文件已经存在! 覆盖旧的数据文件?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "保存数据")
If Ucho = vbNo Then GoTo loopdlg
'取消的话,取消储存文件 If Ucho = vbCancel Then .filename = vbNullString End If End If Exit Do loopdlg: Loop '点选"NO",则再次显示对话框,要求文件名 OpenDigForSaveFile = .filename Exit Function End With DigForSaveFileErr: Select Case Err '没有选择文件点选取消,产生cdlcancel错误 Case cdlCancel OpenDigForSaveFile = vbNullString Case Else OpenDigForSaveFile = Err.Description End Select End Function
Private Sub Command1_Click() On Error GoTo Err CommonDialog1.CancelError = True CommonDialog1.ShowSave If CommonDialog1.FileName <> "" Then If Dir(CommonDialog1.FileName) <> "" Then MsgBox "文件已存在", vbCritical, "系统提示" End If End If Err: If Err.Number = 32755 Then MsgBox "你按了取消!", vbCritical, "系统提示" End If End Sub
利用API检测文件是否存在 作者:土人 在某些场合,我们需要确定特定目录下特定文件是否存在。VB自带的DIR函数可以查找符合条件的文件(在VB编程乐园已经有过介绍),但用起来略显复杂。这里介绍一种较为简单的方法。 API函数的 SHFileExists 的功能,从其名字来看,应该是 Search File Exists,亦即查找存在的文件。用它来检测文件存在与否是很容易的。试看下面的例子。在标准EXE工程放置两个文本框和一个按钮,输入如下代码:Private Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As LongPrivate Sub Command1_Click() Dim i As Integer i = Str$(SHFileExists(Text1.Text)) If i = 0 Then 'Str$值只有两种可能,0或者1 Text2.Text = "文件不存在" Else Text2 = "文件存在" End If End Sub按F5运行程序,在 Text1 输入要查找的文件的驱动器名、路径和名称,然后点击按钮,Text2会报告文件是否存在。 值得一提的是,SHFileExists 函数支持对任何文件的查找,同时也支持对文件夹的查找。 ************************************************************************直接使用VB的Dir函数程式 Public Function IsFileExit(strFileName As String) As Boolean If Dir(strFileName, vbNormal Or vbReadOnly Or vbHidden Or _ vbArchive Or vbSystem) = "" Then IsFileExit = False Else IsFileExit = True End If End Function若文件存在会返回True
接下就是等待获得文件名
在其中如何判断?
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type
Public Const INVALID_HANDLE_VALUE = -1 '文件不存在时系统返回的常量
Public WFH As WIN32_FIND_DATA
Public Declare Function FindFirstFile Lib "Kernel32" Alias "FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
'检查一个文件是否存在,若存在返回 true,不存在返回 false
Public Function IsFileExist(filename As String) As Boolean
Dim sfiles As Long
sfiles = FindFirstFile(filename, WFH)
If sfiles = INVALID_HANDLE_VALUE Then
IsFileExist = False
Else
IsFileExist = True
End If
End Function'下面这个函数从对话框取回文件名,返回类型变体
'返回文件名有几种情况:1.空
'2.返回已存在的文件名,不过会询问是否覆盖,所以当返回这种文件,就覆盖了
'返回错误,表示取消
Public Function OpenDigForSaveFile(DigFileName As String) As Variant
'显示文件对话框 打开文件,为打开文件做前期工作
With Form1.FDlg
... ... (相关设置)
Do
.filename = DigFileName
.ShowSave
.filename = LTrim(RTrim(.filename))
'判定文件是否存在,若存在则询问是否覆盖(也可以改成报警)
If IsFileExist(.filename) = True Then
Ucho = MsgBox(" 文件已经存在! 覆盖旧的数据文件?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "保存数据")
If Ucho = vbNo Then GoTo loopdlg
'取消的话,取消储存文件
If Ucho = vbCancel Then
.filename = vbNullString
End If
End If
Exit Do
loopdlg:
Loop '点选"NO",则再次显示对话框,要求文件名
OpenDigForSaveFile = .filename
Exit Function
End With
DigForSaveFileErr:
Select Case Err
'没有选择文件点选取消,产生cdlcancel错误
Case cdlCancel
OpenDigForSaveFile = vbNullString
Case Else
OpenDigForSaveFile = Err.Description
End Select
End Function
On Error GoTo Err
CommonDialog1.CancelError = True
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
If Dir(CommonDialog1.FileName) <> "" Then
MsgBox "文件已存在", vbCritical, "系统提示"
End If
End If
Err:
If Err.Number = 32755 Then
MsgBox "你按了取消!", vbCritical, "系统提示"
End If
End Sub
作者:土人
在某些场合,我们需要确定特定目录下特定文件是否存在。VB自带的DIR函数可以查找符合条件的文件(在VB编程乐园已经有过介绍),但用起来略显复杂。这里介绍一种较为简单的方法。
API函数的 SHFileExists 的功能,从其名字来看,应该是 Search File Exists,亦即查找存在的文件。用它来检测文件存在与否是很容易的。试看下面的例子。在标准EXE工程放置两个文本框和一个按钮,输入如下代码:Private Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As LongPrivate Sub Command1_Click()
Dim i As Integer
i = Str$(SHFileExists(Text1.Text))
If i = 0 Then 'Str$值只有两种可能,0或者1
Text2.Text = "文件不存在"
Else
Text2 = "文件存在"
End If
End Sub按F5运行程序,在 Text1 输入要查找的文件的驱动器名、路径和名称,然后点击按钮,Text2会报告文件是否存在。
值得一提的是,SHFileExists 函数支持对任何文件的查找,同时也支持对文件夹的查找。
************************************************************************直接使用VB的Dir函数程式 Public Function IsFileExit(strFileName As String) As Boolean
If Dir(strFileName, vbNormal Or vbReadOnly Or vbHidden Or _
vbArchive Or vbSystem) = "" Then
IsFileExit = False
Else
IsFileExit = True
End If
End Function若文件存在会返回True
.Flags = cdlOFNOverwritePrompt