ADODB.Stream SaveToFile 在NT上随即出现3004错误的问题

lsgt 2006-09-12 06:35:16
set sCome = Server.CreateObject("ADODB.Stream")
sCome.Type = 1
sCome.Mode = 3
sCome.Open
sCome.Write FileData
sCome.SaveToFile (sPath & FileName),2
sCome.Close

在2000和2003上正常,在NT上时,如果服务器上文件不存在,就没问题。当服务器上文件已经存在时,大多数时候出现3004(写入文件失败),偶尔能成功。

有没有解决办法?
...全文
563 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgt 2006-09-13
  • 打赏
  • 举报
回复
不是权限问题,也不是NTFS问题。

经再次确认,按如下操作顺序:
1 上传A.DOC到\upload目录下,成功
2 通过http://.../upload/a.doc打开该文件,成功
3 再次上传A.DOC到\upload目录,失败,返回3004错误,写入文件失败
4 自第二步打开文件之后大约40秒,再重复第3步,成功。之后重复上传,都成功,除非执行了第2步操作

此试验重复了10此左右,结果均相同。

似乎IIS4.0在客户请求DOC文件之后,会缓存该文件40秒,而再此期间,文件无法被覆盖。
但我换用ascnup组件上传则无此问题。看上去又是ADODB.Stream的问题。但第2步打开文件也并未调用ADODB.Stream。真是怪哉。
lovewinter 2006-09-13
  • 打赏
  • 举报
回复
权限问题,目录设置everyone
penglewen 2006-09-12
  • 打赏
  • 举报
回复
是不是NTFS格式的。可能是这个引起的。换到FAT格式下面去。。。。。。。。。
lsgt 2006-09-12
  • 打赏
  • 举报
回复
有时可以覆盖,有时又不可以,应该不是权限问题。写入目录已给IUSER_XXX和EVERYONE完全控制权限。虚拟目录中也给可该目录可写权限
iasky 2006-09-12
  • 打赏
  • 举报
回复
权限?
lsgt 2006-09-12
  • 打赏
  • 举报
回复
另外,在MSDN上看到,adSaveCreateOverwrite的值是4,但在网上看到很多文章里面都用的是2,这是怎么回事?
lsgt 2006-09-12
  • 打赏
  • 举报
回复
Note If you overwrite an existing file (when adSaveCreateOverwrite is set), SaveToFile truncates any bytes from the original existing file that follow the new EOS.
不好意思,我没看出来这个和我的问题有什么关系,烦请解释一下?

我要的就是覆盖:服务器上的文件被显示到客户端,客户修改之后再传回服务器覆盖以前的文件。
椅子 2006-09-12
  • 打赏
  • 举报
回复
Note If you overwrite an existing file (when adSaveCreateOverwrite is set), SaveToFile truncates any bytes from the original existing file that follow the new EOS.
lsgt 2006-09-12
  • 打赏
  • 举报
回复
这个方法不太好。有没有别的方法?
laogou 2006-09-12
  • 打赏
  • 举报
回复
那就多用fso判断一次文件存在与否,如果存在就先删除
(没用过nt)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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