以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]Addfile的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157911)

--  作者:chnfo
--  发布时间:2020/11/2 14:15:00
--  [求助]Addfile的问题
用表A的X列存了需要压缩的文件的列表。
然后在项目的export目录下存放了一些文件,包括了X列中有的,也有没有的。

Dim zip As New zipFile
Dim zFile As String = ".\\export\\YS.zip"  ‘准备把表A的X列中存在的文件压缩成为一个压缩包,文件名为YS.zip’

If FileSys.FileExists(zfile) Then \'如果压缩文件已经存在
    zip.Open(zFile) \'则打开
Else
    zip.Create(zFile) \'否则创建
End If

For Each file As String In  DataTables("表A").GetValues("X")
    If filesys.FileExists(".\\export\\" & file) = True AndAlso file <> "YS.zip" Then
        zip.AddFile(".\\export\\" &  file )
    End If
Next
zip.Close()

然后执行就报错了
版本:2020.5.29.8
---------------------------
代码执行出错,错误信息:
System.ArgumentException: 路径中具有非法字符。
   在 System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
   在 System.IO.Path.GetFileName(String path)
   在 C1.C1Zip.C1ZipEntryCollection.a(String A_0, Int32 A_1)
   在 UserCode.Test()
---------------------------
确定   

--  作者:chnfo
--  发布时间:2020/11/2 14:18:00
--  
很诡异的是,这样运行又没有问题
Dim zip As New zipFile
Dim zFile As String = ".\\export\\YS.zip"

If FileSys.FileExists(zfile) Then \'如果压缩文件已经存在
    zip.Open(zFile) \'则打开
Else
    zip.Create(zFile) \'否则创建
End If

For Each file As String In filesys.GetFiles(".\\export")    ‘这是直接去export下去压缩文件’
    If filesys.GetName(file) <> "YS.zip" Then
        zip.AddFile( file )
    End If
Next
zip.Close()

两者的区别就是一个是从其它地方获取文件的名称,然后与文件的路径组合成需要压缩的文件名(含路径)
一个是直接在文件夹下读取文件名称

--  作者:有点蓝
--  发布时间:2020/11/2 14:19:00
--  
本地文件操作都必须使用完整的绝对路径,不能使用相对路径


Dim zFile As String = "c:\\xxx\\export\\YS.zip" 

--  作者:chnfo
--  发布时间:2020/11/2 14:26:00
--  
Dim zip As New zipFile
Dim zFile As String = ".\\export\\YS.zip"

If FileSys.FileExists(zfile) Then \'如果压缩文件已经存在
    zip.Open(zFile) \'则打开
Else
    zip.Create(zFile) \'否则创建
End If

For Each file As String In filesys.GetFiles(".\\export")
    If filesys.GetName(file) <> "YS.zip" Then
        zip.AddFile( file )
    End If
Next
zip.Close()

----但这样执行试过了,没有问题哟

--  作者:有点蓝
--  发布时间:2020/11/2 14:33:00
--  
请改为完整的绝对路径
--  作者:chnfo
--  发布时间:2020/11/2 14:47:00
--  
好吧,确实绝对路径可以解决。
用projectpath,也不复杂

--  作者:chnfo
--  发布时间:2020/11/3 9:07:00
--  
再请教一下,哪些情况下可以用相对路径?比如外部数据连接,如果单机使用安装目录下的指定accdb。象readalltext之类的哪些要用绝对路径?还是说不管是啥,全换成projectpath?
--  作者:有点蓝
--  发布时间:2020/11/3 9:26:00
--  
客户端程序基本上都只能使用绝对路径。只有网页有相对路径的用法
--  作者:chnfo
--  发布时间:2020/11/3 10:45:00
--  
设置外部数据源的那里,选择和输入数据库名称那里,能用.\\xxx.accdb吗?
--  作者:有点蓝
--  发布时间:2020/11/3 10:47:00
--  
不能