Foxtable(狐表)用户栏目专家坐堂 → 如何关闭一个文件


  共有5825人关注过本帖树形打印复制链接

主题:如何关闭一个文件

帅哥哟,离线,有人找我吗?
zhsenchzhi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
如何关闭一个文件  发帖心情 Post By:2015/1/13 1:28:00 [显示全部帖子]

用webbrowser 打开一个文件后, 用 filesys删除或者移动该文件,报一个文件正在使用中的错误,  想把这个文件关掉,仅仅改变  webbrowser  所显示的文件是不行的, fileinfo也没有类似的方法,请问该怎样关闭一个打开的文件呢?

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/13 15:53:00 [显示全部帖子]

我把 address 设成了 about:blank,还是不行呀
仍然在报正在使用

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/13 16:22:00 [显示全部帖子]

还是不行呀,, 分别把 web.Address  设成 about:blank, “”, nothing  和别的文档,甚至家了以下代码,还是不行,总是 报 文件正在使用,操作失败


完整代码如下
    try
        oDocument.Saved = True
        
        oDocument.save
        oDocument.close
    Catch ex As Exception
        'MessageBox.Show("追加数据失败")
    End Try
    
    
    Dim web As WinForm.WebBrowser = Forms("文档管理主窗口").Controls("WebBrowser1")
    'web.Address = "about:blank"
    web.Address = "d:\readme.txt"
    FileSys.DeleteFile(fileFullDir)


请问你们之前做过实验吗?

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 1:08:00 [显示全部帖子]

具体代码如下所示, 代码为 一个 表的 currentchanged 事件

思路为: 某表被选择的当前行改变之后,  根据表中某列的值,找到某加密文件,解压后 在 webbrowser中显示出来,同时记下 该文档名字和位置,改变所显示的文件后,同时把上一显示文件删除

目前存在的问题: 1  打开过的文件不能被删除, 2  excel文档上面的菜单,只有第一次能显示出来, 切换文档后,excel菜单消失,只能重新打开foxtable 后才能再次显示,同样的,只能显示一次

不知道从下面的代码中能不能找到问题



If e.Table.Current Is Nothing Then '如果Current为Nothing
    Return '则返回
End If



Dim fileDesc As String =  e.Table.Current("描述")
Dim fileFullDir As String =  e.Table.Current("文件完整路径")
'MessageBox.show(fileFullDir)
Dim web As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
web.OfficeToolBar = True
If fileDesc = "文件" Then
    'MessageBox.show( System.Web.HttpUtility.UrlDecode(web.Address) & "            " & fileFullDir)
    Dim jiemiHouAddress As String =  System.Web.HttpUtility.UrlDecode(web.Address)
    jiemiHouAddress = jiemiHouAddress.Replace("/","\")
    
    Dim tempFileName As String = Functions.Execute("getTmepFileNameByEtFileName",fileFullDir)
    
    
    If jiemiHouAddress.EndsWith(tempFileName) =False Then
        
        
        Dim lowerJiemiHouAddress As String = jiemiHouAddress.ToLower()
        If  (lowerJiemiHouAddress.EndsWith(".xls") OrElse lowerJiemiHouAddress.EndsWith("xlsx") OrElse lowerJiemiHouAddress.EndsWith("csv") OrElse lowerJiemiHouAddress.EndsWith("doc") OrElse lowerJiemiHouAddress.EndsWith("docx")) _
            AndAlso oDocument IsNot Nothing Then
            
            try
                'oDocument.cancel
                oDocument.save
                oDocument.Saved = True
                
            Catch ex As Exception
                'MessageBox.Show("追加数据失败")
            End Try
            
            try
                oDocument.close
            Catch ex As Exception
                'MessageBox.Show("追加数据失败")
            End Try
            
            
            
        End If
        
        try
            oDocument.delete
        Catch ex As Exception
            'MessageBox.Show("追加数据失败")
        End Try
        
        
        Functions.Execute("jiemiFile",fileFullDir, tempFileName )
        Dim ifo As New FileInfo(tempFileName)
        'ifo.ReadOnly = True
        ifo.Hidden = True
        
        try
            Dim webBasecontrol As Object = web.basecontrol
            webBasecontrol.Navigate(tempFileName)
            'web.address=tempFileName
        Catch ex As Exception
            'MessageBox.Show("追加数据失败")
        End Try
        
        
        
        If FileSys.FileExists(lastWebBrowserAddress) Then
            FileSys.DeleteFile(lastWebBrowserAddress)
            try
                ' FileSys.DeleteFile(lastWebBrowserAddress)
                
            Catch ex As Exception
                'MessageBox.Show("追加数据失败")
            End Try
        End If
        lastWebBrowserAddress = tempFileName
        
    End If
Else
    lastWebBrowserAddress = Nothing
    'web.Address = Nothing
    web.Address = "about:blank"
End If


 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 8:55:00 [显示全部帖子]

独立的按钮也没用,我设了右键菜单来删除,依然不行, 
下面是你要的例子,运行时,请在 Attachments 下面添加一个文件夹,文件夹里面要有几个文件,第一次运行时,会把这些文件自动加密

运行时, 会把要打开的文件 自动解密到一个temp 文件夹下面, 然后切换文件后不能删除,不仅仅在项目中不能删除,直接 从文件夹下面删除,都不行,操作系统都会提示文件正在使用中


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目文档-加密.foxdb



 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 9:40:00 [显示全部帖子]

你说问题在加解密上,我倒想问问,怎么出在加解密上了,请给个理由先,我这个原来就没有加解密,问题也一样,加解密是昨天才加上去的,就算是加解密上,请问解决问题的方法在那里

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 10:02:00 [显示全部帖子]

请问这样会不会把 用户自己打开的excel 也会关闭掉?  另外就是这个 程序运行的时候,的确会导致excel进程无响应,程序也跟着无响应,必须手工从进程管理器上把excel关闭才行,是不是也是这个原因导致的?

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 10:16:00 [显示全部帖子]

采用你的方法,刚才又试了一下,发现,无论doc还是excel,都存在这样的问题,而且采用你的方法以后,部分文档可以删除,部分还是不行? 我这里有17个文档,有9个不能删除,8个可以删除,要不要把这17个文档给你,再找找原因?

doc文档怎样关闭?

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 10:24:00 [显示全部帖子]

foxtable有获得进程PID的方法吗?


 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2015/1/14 11:18:00 [显示全部帖子]


根据提示,我写了一个 内部函数,来kill  excel 和 winword的进程,每次来调用它,可是又出现一个奇怪的问题, 问题出在 p.kill上,如果当前打开的文档也是一个excel火鹤word,就会出现问题, 我解决的方法是加上 try, 问题是 如果出现问题后,在 catch内 弹出一个MessageBox,就能够抓住并解决异常,并且把别的进程杀掉,可如果不弹出一个MessageBox,就不能杀掉别的进程,例如 catch里为空,或者一个别的语句, 我是想并不需要弹出一个MessageBox,这样会给用户造成困惑,请问catch里面有什么特殊吗,为什么必须弹出MessageBox才能解决异常呢? 如下所示

Try
                p.kill
            Catch ex As Exception
                'MessageBox.Show(psNames(i),"提示",MessageBoxButtons.OK)    ‘把这条语句放开就没事
                Dim ss As Integer =1    仅仅执行这个,或者什么都不执行,就不行
                ss=2
            End Try



完整代码如下

Dim psNames(7) As String
psNames(0) = "excel"
psNames(1) = "EXCEL"
psNames(2) = "excel.exe"
psNames(3) = "EXCEL.EXE"
psNames(4) = "winword"
psNames(5) = "WINWORD"
psNames(6) = "winword.exe"
psNames(7) = "WINWORD.EXE"

For i As Integer = 0 To psNames.Length -1
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName(psNames(i))
    For Each p As System.Diagnostics.Process In ps
        If p.MainWindowTitle = Nothing  Then
            
            Try
                p.kill
            Catch ex As Exception
                'MessageBox.Show(psNames(i),"提示",MessageBoxButtons.OK)
                Dim ss As Integer =1
                ss=2
            End Try
            
            
        End If
    Next
    
Next

 回到顶部
总数 26 1 2 3 下一页