使用“文件”对话框,另存时

sg 2003-09-15 09:46:51
怎样做,才能使另存时,如果要保存的文件已存在,就报警?
...全文
30 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
watt 2003-09-15
  • 打赏
  • 举报
回复
有那末复杂吗?Dialog本身已经有了。
.Flags = cdlOFNOverwritePrompt
viena 2003-09-15
  • 打赏
  • 举报
回复
呵呵,用Dir()
rainstormmaster 2003-09-15
  • 打赏
  • 举报
回复
利用API检测文件是否存在
作者:土人
在某些场合,我们需要确定特定目录下特定文件是否存在。VB自带的DIR函数可以查找符合条件的文件(在VB编程乐园已经有过介绍),但用起来略显复杂。这里介绍一种较为简单的方法。
API函数的 SHFileExists 的功能,从其名字来看,应该是 Search File Exists,亦即查找存在的文件。用它来检测文件存在与否是很容易的。试看下面的例子。

在标准EXE工程放置两个文本框和一个按钮,输入如下代码:

Private Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As Long

Private 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

sg 2003-09-15
  • 打赏
  • 举报
回复
谢谢,我try一下
lihonggen0 2003-09-15
  • 打赏
  • 举报
回复
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

tangyang8061 2003-09-15
  • 打赏
  • 举报
回复
当然这是简单的思路.但也好用
tangyang8061 2003-09-15
  • 打赏
  • 举报
回复
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
sg 2003-09-15
  • 打赏
  • 举报
回复
我刚刚回复了,不知怎么没看到我的帖子,

环境vb

Commondialog1.showsave
接下就是等待获得文件名
在其中如何判断?
armu80830 2003-09-15
  • 打赏
  • 举报
回复
http://public.whut.edu.cn/xg/vb/dhk.htm
wzucdos 2003-09-15
  • 打赏
  • 举报
回复
说清楚点儿,到底是在什么环境中?如果在vb设计中可以先判断文件存在不存在

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧