2011-01-05 26 views
1

这就是我想要做的事:在c#中有一种方法可以知道用户何时用应用程序完成文件编辑?

  1. 从服务器
  2. 开放使用的System.Diagnostics.Process相应的应用程序文件下载文件(TXT,DOC,XLS,等等)。开始(文件路径)
  3. 使用FileSystemWatcher监视文件更改。
  4. 每次文件被更改,将文件上传到服务器
  5. 继续监视,直到用户已经完成编辑文件
  6. 删除文件
  7. 退出应用程序的本地副本

我被卡在第5步。如何知道用户是否已完成文件的工作?

我不能依赖被锁定的文件(记事本不会锁定txt文件)。

我不能依赖已退出或不存在的进程(例如Notepad ++ for txt文件:该文件可以在选项卡中打开。关闭选项卡后,您已完成编辑文件,但进程为仍在运行)

有关如何在C#中执行此操作的任何想法/要点?

+0

我明白你的观点。我想该System.Diagnostics.Process.Start()是默认的编辑器,对不对?在那种情况下,这很困难。我们解决了这个问题,启动了我们自己的编辑器(或者如果您愿意的话,总是记事本),然后等到流程结束,但这可能不是您的解决方案。 – 2011-01-05 11:55:27

+0

关于notepad ++:git用户通过使用'-multiInst -nosession -notabbar'开关解决了这个问题 - 这种方式使notepad ++被迫创建一个独立的进程来处理被监控的文件。 – rsenna 2011-01-05 12:15:11

+0

@Kiquenet不是。我已经为Office类型文件(doc,xls,ppt)进行了锁监视,这是我的用户使用最广泛的文件。 TXT文件只有一小部分文件,最终不是问题。 – 2013-03-04 14:38:46

回答

3

你已经排除了两种可能的方法检测正在使用的文件:文件锁定以及开始退出的过程。

我想到的唯一选择是在用户完成编辑时显示一个对话框请求

编辑:它的价值 - FileZilla有这种类型的行为。您可以选择编辑远程服务器上的文件,下载文件,启动默认编辑器,(在后台)显示“如果您已完成编辑 - 单击确定”按钮。
这让我有机会取消编辑,如果我已经把文件弄糟并保存了。

+3

+1作为用户,我宁愿应用程序询问完成时间,而不是猜测 – 2011-01-05 11:58:28

+0

感谢您的对话替代方案......在此主题中查看其他帖子和评论,看起来好像是这是唯一的出路。虽然这并没有那么多用户友好,但我认为:( – 2011-01-05 16:39:47

0

您可以检查文件的最后更改日期。当您保存对文件的更改时,将设置此日期。但请注意,由于可以将其设置为任何值(使用适当的工具),因此该字段不是非常可靠的。

+0

这与问题中的(3)具有相同的效果,即FileSystemWatcher – 2011-01-05 12:01:21

+0

糟糕 - 你是对的,没有想到这一点。 – 2011-01-05 12:05:53

1

这真的很难做 - 我们尝试了各种各样的东西,但从未发现任何万无一失的东西。如果你知道你已经启动的程序,理论上,你可以找到它使用的文件句柄,并查看它何时停止使用你感兴趣的程序.....但是如果你依靠Windows来解决默认的应用程序甚至发起这变得棘手。

我们将可编辑文件复制到一个以日期命名的临时文件夹中,并依靠用户在完成其编辑会话时将其上传回来。然后我们在应用程序启动时清理前几天的文件夹。

相关问题