怎样做,才能使另存时,如果要保存的文件已存在,就报警?

解决方案 »

  1.   

    http://public.whut.edu.cn/xg/vb/dhk.htm
      

  2.   

    我刚刚回复了,不知怎么没看到我的帖子,环境vbCommondialog1.showsave
    接下就是等待获得文件名
    在其中如何判断?
      

  3.   

    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
      

  4.   

    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
      

  5.   

    利用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 
      

  6.   

    有那末复杂吗?Dialog本身已经有了。
    .Flags = cdlOFNOverwritePrompt