C# 杀死Excel或Csv文件上的锁

C# 杀死Excel或Csv文件上的锁,c#,excel,csv,C#,Excel,Csv,我有一个过程,它在excel和csv文件集合上循环,并将数据拉回到数据表中进行处理: public static DataTable Get(string path, bool IsFirstRowHeader) { var header = "No"; var sql = string.Empty; DataTable dataTable = null; var pathOnly = string.Empty;

我有一个过程,它在excel和csv文件集合上循环,并将数据拉回到数据表中进行处理:

    public static DataTable Get(string path, bool IsFirstRowHeader)
    {
        var header = "No";
        var sql = string.Empty;
        DataTable dataTable = null;
        var pathOnly = string.Empty;
        var fileName = string.Empty;

        try
        {
            pathOnly = Path.GetDirectoryName(path);
            fileName = Path.GetFileName(path);

            sql = @"SELECT * FROM [" + fileName + "]";

            if (IsFirstRowHeader) { header = "Yes"; }

            using (var connection = new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended   Properties='Excel 8.0;HDR=YES;IMEX=1;';"))
            {
                using (var command = new OleDbCommand(sql, connection))
                {
                    using (var adapter = new OleDbDataAdapter(command))
                    {
                        dataTable = new DataTable {Locale =   CultureInfo.CurrentCulture};
                        adapter.Fill(dataTable);
                    }
                }
            }
        }
        catch(Exception ex)
        {
            ErrorLog.Log();
        }

        return dataTable;
    }
但是,如果用户正在查看此文件,则会出现以下错误:

The Microsoft Jet database engine cannot open the file
'\\cjserver\IS_CalendarImport\Staging\12-03-13done'.  It is already opened exclusively 
by another user, or you need permission to view its data.

是否有一种方法(最好是代码,C#)可以自动释放或绕过锁?

不知道如何使用Jet绕过锁(可能不可能),但在大多数情况下,您可以在使用文件时复制该文件


因此,一个简单的解决方法是将文件复制到临时目录中,并根据临时文件查询数据。

理论上,遍历windows内部函数等。是的可以杀死锁——事实上,就是这样。然而,在一般情况下,这是不明智的,因为程序不希望锁由于外部进程而神奇地消失

在尝试使用该文件之前,测试该文件以查看是否可以打开它是一个好策略(尝试直接在c#代码中打开该文件)

如果无法用c代码打开文件,可以采用以下策略之一:

1) 只需跳过该文件——可能还有跳过文件的用户、管理员等信息 2) 稍后重试该文件,如果重试次数太多而未成功,则恢复为跳过清除
3) 在我打字时,我看到DarrenMB已经建议复制文件——并使用副本。

Excel将始终以独占方式打开文件,防止其他人访问这些文件。