c#文件复制错误文件正在被其他程序使用

本文关键字:文件 其他 程序 复制 错误 | 更新日期: 2023-09-27 18:19:04

我有一个目录,我做/放置一些文件。当文件系统监视程序看到一个新文件时,它将该文件复制到另一个目录中。但是当我直接在dir1中创建文件时,它会关闭,说它被另一个程序使用。

我怎样才能摆脱这个问题?

下面是我的代码:
using System;
using System.IO;
using System.Configuration;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace ChaloSync
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private bool pause = false;
    String source = ConfigurationManager.AppSettings[@"Directory1"];
    String target = ConfigurationManager.AppSettings[@"Directory2"];
    private void start()
    {
        pause = true;
        Start.Text = "Pause";
        fileSystemWatcher1.EnableRaisingEvents = true;
    }

    static void config()
    {
        foreach (string key in ConfigurationManager.AppSettings)
        {
            string value = ConfigurationManager.AppSettings[key];
            MessageBox.Show(value);
        }
    }
    private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
    {
            listBox1.Items.Add("File changed> " + e.FullPath + " -Date:" + DateTime.Now);
    }
    private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
    {
            listBox1.Items.Add("File created> " + e.FullPath + " -Date:" + DateTime.Now);
            File.Copy(e.FullPath , Path.Combine(target,e.Name));
    }
    private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
    {
            listBox1.Items.Add("File deleted> " + e.FullPath + " -Date:" + DateTime.Now);
    }
    private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
    {
            listBox1.Items.Add("File renamed> " + e.FullPath + " -Date:" + DateTime.Now);
    }
    private void Start_Click(object sender, EventArgs e)
    {
        fileSystemWatcher1.Path = source;
        if (!pause)
        {
            start();
        }
        else
        {
            pause = false;
            Start.Text = "Start";
            fileSystemWatcher1.EnableRaisingEvents = false;   
        }
        }
    }
}

c#文件复制错误文件正在被其他程序使用

不是同样的问题,但原因是一样的。这个解决方案可能对你有好处。

这种方法的一个典型问题是文件仍然是在事件被触发时复制。很明显,你会得到一个异常,因为文件在复制期间被锁定。一个例外是

作为一种解决方法,您可以先复制文件,然后将其重命名为听重命名事件

或者另一种选择是使用while循环检查文件可以用写访问打开。如果可以,你会知道的拷贝已经完成。c#代码看起来像这样(在您可能希望在生产系统中设置重试的最大次数或者timeout(而不是while(true)):

(从这里复制:当多个文件被添加到一个目录时,使用FileSystemWatcher访问文件错误)

如果您在读写文件时遇到锁定问题,请检查FileShare选项。

请查看此链接

重命名和创建同时进行。所以你不能复制它因为它已经被用来重命名了。