当前位置:编程学习 > VB >>

复制文件,重命文件不覆盖?

请教VB高手们:
把A目录里的全部xls文件复制到B目录里,重命文件不覆盖,也不出现提示,应该怎么写代码呀? --------------------编程问答-------------------- if dir(目标文件)="" then
'复制
endif
  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 

http://feiyun0112.cnblogs.com/ --------------------编程问答-------------------- if dir(目标文件)="" then 
'复制 
endif 

请问这个 dir(目标文件) 里的目标文件怎么写呀?在A、B目录里有好多文件的呀?从A->B,B目录里已经存在的文件就不更新,只复制B目录里没有的文件。完整代码怎么写呀? --------------------编程问答-------------------- 这样试试看

Dim Fso As New FileSystemObject
Dim A_Folder,A_Files,A_Path
Set Fso = CreateObject("Scripting.FileSystemObject")
Set A_Folder = Fso.GetFolder("A的文件夹路径")
Set A_Files = A_Folder.Files
    For Each A_Path In A_Files
        Fso.CopyFile A_Path.path,"B的文件夹路径",true
    Next
Set A_Files = Nothing
Set A_Folder = Nothing
Set Fso = Nothing --------------------编程问答-------------------- 看错了主楼的意思,不覆盖重名文件将true改成false就可以了,不过a中的文件不会复制到b文件夹中来。 --------------------编程问答-------------------- CopyFile 方法
将一个或多个文件从某位置复制到另一位置。

object.CopyFile source, destination[, overwrite]

参数
object

必选项。应为 FileSystemObject 对象的名称。

source

必选项。表示指定文件的字符串。要复制一个或多个文件时,文件名中可以有通配符。

destination

必选项。表示目标位置的字符串,从 source 复制文件到该位置。不允许用通配符。

overwrite

可选项。Boolean 值表明是否覆盖现有文件。如果是 True,则覆盖文件;如果是 False,则不覆盖现有文件。默认值是 True。要注意,无论 overwrite 设置为何值,只要设置 destination 为只读属性,CopyFile 操作就无法完成。

说明
仅能在 source 参数的路径最后一个组成部分中使用通配符。例如,可以使用:

FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"
但是,不能使用:

FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"
如果 source 包含通配符或 destination 以路径分隔符 (\) 结束,则假定 destination 是现有文件夹,复制匹配文件到该文件夹。否则,假定 destination 为要创建的文件。在任一种情况下,复制单个文件时,会出现以下三种情况。

如果 destination 不存在,则复制 source。这是通常会发生的情况。 
如果 destination 是已经存在的文件,当 overwrite 为 False 时会出现错误。否则,复制 source 覆盖现有文件。 
如果 destination 是目录,则会出现错误。 
如果 source 使用通配符,但并没有相匹配的文件时,则会出现错误。CopyFile 方法在遇到出现的第一个错误时停止。该方法不会撤消错误发生前所作的任何更改。
--------------------编程问答-------------------- 不用写代码,上网下载一个COPY的工具软件,多得很~ --------------------编程问答-------------------- 做个记号 --------------------编程问答-------------------- 重命文件不覆盖,要么重名文件不拷,要么拷过去改名,判断一下是否重名就行了,都不复杂. --------------------编程问答-------------------- 你的這個問題網上有存在的代碼,我以前也做過這個問題。 --------------------编程问答-------------------- --------------------编程问答-------------------- ding --------------------编程问答-------------------- 在网上确实有现成的代码,我见过 --------------------编程问答-------------------- 用Copyfile 还是蛮简便的! --------------------编程问答-------------------- xcopy /d 源文件 目标文件 --------------------编程问答-------------------- ding --------------------编程问答-------------------- Up! --------------------编程问答-------------------- 复制不覆盖(重命名)这个问题很容易解决吧?
假定原文件名Abc.txt
定义一个变量i&
目标文件名=原文件名
如果目标文件存在 那么就 spit(目标文件名,".")
取得原文件名前部abc
i=i+1
新的目标文件名=原文件名前部+"(" +i +")+原文件名后部
即abc(1).txt
反复测试dir(目标文件名)<>""? --------------------编程问答-------------------- 方案1.dir+copyfile

方案2.filesystemobject --------------------编程问答-------------------- 批处理
@echo off
if "%1"=="" goto u
if "%2"=="" goto u
goto m
:u
echo 将目录1中有而在目录2中没有的所有[指定]文件全部拷贝到目录2中的批处理merge.bat
echo (不含子目录,依赖f:\lackof.exe)
echo 例如: merge c:\dirname1 e:\dirname2 [*.*]
goto e
:m
cd /d %1
dir /b /l /a-d %3 >c:\prog
cd /d %2
dir /b /l /a-d %3 >c:\list
cd /d c:\
f:\lackof.exe >lack
cd /d %1
cd /d %2
@echo on
for /f %%f in (c:\lack) do copy %1\%%f
@echo off
del c:\prog
del c:\list
del c:\lack
:e

其中lackof.exe到我的资源http://download.csdn.net/zhao4zhong1里面下载 --------------------编程问答--------------------

'全VB语句写的,拷贝文件,不覆盖,不提示
Private Sub Command1_Click()   
   FldCopy "c:\222\*.xls", "d:\111"

End Sub

Private Sub FldCopy(ByVal a As String, ByVal b As String)
    Dim f1() As String, f2() As String, f As Boolean
    Dim f2z As String, iph As String, ifn As String
    
    ifile a, f1, f
    If f Then Exit Sub
    iph = Left(a, InStrRev(a, "\"))
    ifn = Mid(a, InStrRev(a, "\"))
    ifile b & ifn, f2, f
    f2z = "?" & Join(f2, "?")
    For i = 0 To UBound(f1)
        If InStr(f2z, "?" & f1(i)) <> 0 Then
        Else
           FileCopy iph & f1(i), b & "\" & f1(i)
        End If
    Next

End Sub

Private Sub ifile(ByVal a As String, b() As String, f As Boolean)
    Dim tmp As String
    tmp = Dir(a)
    If tmp = "" Then f = True: Exit Sub
    Do While tmp <> ""
       ReDim Preserve b(i)
       b(i) = tmp
       tmp = Dir
       i = i + 1
    Loop
End Sub

--------------------编程问答-------------------- 使用DOS外部命令
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,