回 帖 发 新 帖 刷新版面

主题:showopen 可同时打开多个文件 但是79个图片报错,咋办

少点还行,都能打开并复制,但是我打开79个jpg图片就不行了。报错了。怎么办。

回复列表 (共10个回复)

沙发

越学越觉得自己太菜。过去做过几个程序,都是数据处理为主的,觉得自己还行。呵呵,现在都是处理文件的自己什么都不会了。哎。自卑了。。。。。。。

谢谢

板凳

showopen  这是什么语句啊???

附件是什么啊?

3 楼

系统好像是提示:OLE的文件名缓冲不足,这个缓冲是OLE的,不是VFP的。
你就想办法少同时打开一些文件就结了。否则你就想办法增加OLE的缓冲空间。

4 楼

WITH this.Parent.OleCD1
.ShowOpen()
IF AT(CHR(0),.FileName)>0
    文件列表=STRTRAN(.FileName,CHR(0),CHR(13)+CHR(10))
ELSE
    文件列表=STRTRAN(.FileName," ",CHR(13)+CHR(10))
ENDIF
路径=MLINE(文件列表,1)
文件列表=STRTRAN(文件列表,路径+CHR(13)+CHR(10),"")
ENDWITH
CD d:\
IF ! DIRECTORY("pic")
    MD pic
ENDIF
FOR i=1 TO MEMLINES(文件列表)
    文件=路径+"\"+MLINE(文件列表,i)
    COPY FILE (文件) TO pic\*.*
ENDFOR
WAIT WINDOW "已复制完毕!!!" NOWAIT

上面是源代码 是cbl518老师给弄的。呵呵。以前都好用,但是没弄太多文件,在实际应用中最多可能需要1000个文件 ,实际工作中300-500经常有的。所以不可以少弄。不行就换语句 。我实验了 Liqifeng同志的,foxer.dll可以复制这么多没问题,所以要是没有好办法,就换foxer的 

foxer代码如下



local lcFileNames, lcStrFilter

local lcPath, lcFileName

*--lcStrFilter 应以 "||" 结尾。
lcStrFilter = "form (*.jpg)|*.jpg|class lib (*.bmp)|*.bmp|All files(*.*)|*.*||"
lcFileNames = QFGetFile2(lcStrFilter, "", 1)

if( empty(lcFileNames) )
    return
endif

if( file(lcFileNames) ) && 只打开了一个文件.
    ?lcFileName
else
    PSSetStringLine(lcFileNames) 
    lcPath = addbs(PSGetItem()) && 第一个字符串是路径名.
    do while ( not PSIsEnd() )
        lcFileName = PSGetItem()
        ?(lcPath + lcFileName)
        **此处拷贝文件到指定文件夹内


        **拷贝完成
    enddo
endif

5 楼

对了  cbl518老师问我附件。我发了个图 就显示附件了。没有什么附件。

6 楼

将:
COPY FILE (文件) TO pic\*.*

改为:
RENAME (文件) TO pic\*.*

7 楼

不是复制问题  是如果打开很多文件 .showopen()直接提示错误 错误提示后 选择挂起 箭头指向.showopen()

8 楼

放弃.showopen()了,改用foxer.dll了。

9 楼

我不想用第三方控件,用最笨办法:VFP的 list file 语句

list file 盘符\路径\*.* to _文件名文本.TXT

再对《_文件名文本.TXT》分析之后进行向应的处理,不知道这种方法能不能处理上万个文件。

10 楼

谢谢大家了,用foxer解决了。。。谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册