C#怎监控例似WORD这样用临时文档记录修改过的文件,并复制修改后的文件?

当然是采用FileSystemWatcher监控不是问题,但例似WORD这样用临时文档记录修改过的文件,过程是保留在多个临时文件中的。没法更新到WORD文件去。只有当word文档关闭时。才讲临时文件内容合并到住文件内。

用.net自带的FileSystemWatcher组件,它能与操作系统的接口结合起来,自动帮你监测指定的文件夹或文件。当对文件或文件夹做操作时,会自动触发你定义的事件。
以下为简介,看了你就会明白。
1.FileSystemWatcher基础

在应用FileSystemWatcher对象之前,必须了解这个对象的一些基本属性和事件。毫无疑问,这个对象的最重要的属性为“EnableRaisingEvents”属性。

这个属性决定对象在收到改变通知时是否提交事件。如果EnableRaisingEvents属性设为假,对象将不会提交改变事件。如果设为真,它将提交改变事件。下面是在应用FileSystemWatcher对象时将要用到的其它一些重要属性/事件:

属性:

Path——这个属性告诉FileSystemWatcher它需要监控哪条路径。例如,如果我们将这个属性设为“C:Temp”,对象就监控那个目录发生的所有改变。
IncludeSubDirectories——这个属性说明FileSystemWatcher对象是否应该监控子目录中发生的改变。
Filter——这个属性允许你过滤掉某些类型的文件发生的变化。例如,如果我们只希望在TXT文件被修改/新建/删除时提交通知,可以将这个属性设为“*txt”。在处理高流量或大型目录时,使用这个属性非常方便。

事件:

Changed——当被监控的目录中有一个文件被修改时,就提交这个事件。值得注意的是,这个事件可能会被提交多次,即使文件的内容仅仅发生一项改变。这是由于在保存文件时,文件的其它属性也发生了改变。
Created ——当被监控的目录新建一个文件时,就提交这个事件。如果你计划用这个事件移动新建的事件,你必须在事件处理器中写入一些错误处理代码,它能处理当前文件被其它进程使用的情况。之所以要这样做,是因为Created事件可能在建立文件的进程释放文件之前就被提交。如果你没有准备正确处理这种情况的代码,就可能出现异常。
Deleted——当被监控的目录中有一个文件被删除,就提交这个事件。
Renamed——当被监控的目录中有一个文件被重命名,就提交这个事件。
注:如果你没有将EnableRaisingEvents设为真,系统不会提交任何一个事件。如果有时FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保它被设为真。

事件处理:

当 FileSystemWatcher调用一个事件处理器时,它包含两个自变量——一个叫做“sender”的对象和一个叫做“e”的 FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以下是FileSystemEventArgs对象的一些属性:

Name——这个属性中使事件被提交的文件的名称。其中并不包含文件的路径——只包含使用事件被提交的文件或目录名称。
ChangeType——这是一个WatcherChangeTypes,它指出要提交哪个类型的事件。其有效值包括:
○Changed
○Created
○Deleted
○Renamed
FullPath——这个属性中包含使事件被提交的文件的完整路径,包括文件名和目录名。

2.对多文件夹的监视实例

public static void Run(ArrayList ss)
{
foreach (string s in ss)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = s;//@"d:DownLoads";//args[1];

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.flv";

// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnChanged);

// Begin watching.
watcher.EnableRaisingEvents = true;

}
}
public void OnChanged(object source, FileSystemEventArgs e)
{
//文件改变后的代码
}

public void OnCreated(object source, FileSystemEventArgs e)
{
//添加文件后的代码
}

public void OnDeleted(object source, FileSystemEventArgs e)
{
//文件删除后的代码
}

public void OnRenamed(object source, RenamedEventArgs e)
{
//文件重命名后的代码
}

使用System.IO.FileSystemWatcher时,通常会想在检测到文件创建之后,扫描文件的内容,对之进行一定的处理。但是当我们的程序接到通知时,创建文件的进程可能还在写数据,这时如果想要打开这个文件会抛出异常。

似乎没有什么好办法来解决这个问题,除了最笨的一种:

FileSystemWatcher watcher = new FileSystemWatcher(directory, "*.txt");
watcher.NotifyFilter = NotifyFilters.FileName;
watcher.Created += FileCreated;
watcher.EnableRaisingEvents = true;

private void FileCreated(object sender, FileSystemEventArgs e)
{
while (!IsFileReady(e.FullPath))
{
if (!File.Exists(e.FullPath))
return;
Thread.Sleep(100);
}
//在这里进行文件处理。。。
}

bool IsFileReady(string filename)
{
FileInfo fi = new FileInfo(filename);
FileStream fs=null;
try
{
fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,
FileShare.None);
return true;
}

catch(IOException)
{
return false;
}

finally
{
if(fs!=null)
fs.Close();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-16
利用System.IO空间里FIle类
如:该方法读取文件里的字节
byte[] oldBytes =File.ReadAllBytes("c:\\aa.txt");
至于监控,就可以用Timer控件来实现,你可以设置1分钟或者更短的时间在Timer事件里读取文件的字节。然后与原先读取的字节做比较,如果不同,则复制文件。File.Copy("c:\\aa.txt","aaCopy.txt");

C#怎监控例似WORD这样用临时文档记录修改过的文件,并复制修改后的文件...
Filter——这个属性允许你过滤掉某些类型的文件发生的变化。例如,如果我们只希望在TXT文件被修改\/新建\/删除时提交通知,可以将这个属性设为“*txt”。在处理高流量或大型目录时,使用这个属性非常方便。事件:Changed——当被监控的目录中有一个文件被修改时,就提交这个事件。值得注意的是,这个事件可能会...

C#编程 如何关闭Word2003修改标记功能
我先假设楼主前面的代码已经打开一个文档(或者新建了一个文档),并且这个文档对象对应于变量doc。那么相应的代码是:doc.TrackRevisions = false;即可关闭修改跟踪标记。

C#如何实现Word文档接受所有修订后另存
这个比较容易实现,你参考下这篇文章里的说的方法网页链接就行了,不过这里需要使用Spire.Doc这个,你要先下载安装到你的电脑,项目里面注意添加引用Spire.Doc.dll文件,然后再进行代码操作。

在C# 中复制 Word、Excel、PDF 和 PPT 文档
newPresentation.Save("new.pptx");使用 Aspose API 在 C# 中进行文档复制既简单又高效。通过上述提供的代码示例,您现在可以开始在 C# 应用程序中复制多种格式的文档。访问 Aspose 官方文档以了解更多高级功能和自定义选项,享受编码带来的乐趣!

C#.net 保存为临时文件的解决思路
直接用创建时间的属性。对临时文件的操作太抽象了,视具体程序不同。word是每小时在文件的所在目录另存为一个$开头的隐藏+系统文件,如果文件还未创建就在临时目录保存。在用户正常保存后会把这个文件删除。在word启动时会检查是否有对应的文件,存在则提示用户是恢复(也就是打开备份文件)还是删除。

C#程序中如何保存对已经修改的文件
内容简单的话可以用序列化,反序列化保存到文件,或者用反射技术保存成xml,启动时动态加载 不过我觉得最好还是自己把图片相关的信息,比如图片路径什么的保存到文件\/ 数据库里,然后在程序启动时重新加载这些图片,实现起来简单些 如果是设计期添加的图片,编译成功后自动就保存了,不用自己操心 ...

如何用C#复制WORD的内容到另外一个WORD
参考使用Spire.Doc所做的一个Demo,主要代码段如下 \/\/创建一个Word初始文档并加载原文件 Document sourceDoc = new Document(@"C:\\Users\\Administrator\\Desktop\\sample.docx"); \/\/创建另一个目标文档,并加载目标文件 Document destinationDoc = new Document("target.docx"); \/\/遍历原文...

Word处理控件Aspose.Words功能演示:在 C# 中的 Word 文档中添加...
对于Word文档中的目录,Aspose.Words着重于提供程序化的解决方案。通过这个API,开发者能够轻松地在C#程序中实现以下操作:添加目录:使用Aspose.Words for .NET,可通过代码将目录插入Word文档中,增强文档结构的可导航性。提取目录:文档中的目录可以方便地通过API提取,以便于获取文档内容概览或进一步处理。...

c#,winForm嵌入word并能操作文档
在 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下会创建 Form1。 在工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。WebBrowser 控件会显示出来,并且在...

Word处理控件Aspose.Words功能演示:使用C#对PDF文件进行进一步修改和转 ...
首先,C#的Aspose.Words库允许加载PDF文档,构建其DOM模型,方便进行后续编辑。通过Document构造函数,可以从文件或流中加载文档,例如:加载并转换PDF到DOCX格式,则是通过简单的几行代码实现,例如:要将PDF转换为DOCX,只需在Document对象上调用Save方法,指定输出为DOCX格式和文件名,如:此外,Aspose.Words...

相似回答