18

尝试检查文件是否存在于路径中,但在 File 上出现构建错误。

File 是一种方法,不能在此上下文中使用。

 if (!File.Exists(excelFilePath)) throw new FileNotFoundException(excelFilePath);
        if (File.Exists(csvOutputFile)) throw new ArgumentException("File exists: " + csvOutputFile);

完整类代码

 static void CovertExcelToCsv(string excelFilePath, string csvOutputFile, int worksheetNumber = 1)
    {
        if (!File.Exists(excelFilePath)) throw new FileNotFoundException(excelFilePath);
        if (File.Exists(csvOutputFile)) throw new ArgumentException("File exists: " + csvOutputFile);

        // connection string
        var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", excelFilePath);
        var cnn = new System.Data.OleDb.OleDbConnection(cnnStr);

        // get schema, then data
        var dt = new DataTable();
        try
        {
            cnn.Open();
            var schemaTable = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            if (schemaTable.Rows.Count < worksheetNumber) throw new ArgumentException("The worksheet number provided cannot be found in the spreadsheet");
            string worksheet = schemaTable.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", "");
            string sql = String.Format("select * from [{0}]", worksheet);
            var da = new OleDbDataAdapter(sql, cnn);
            da.Fill(dt);
        }
        catch (Exception e)
        {
            // ???
            throw e;
        }
        finally
        {
            // free resources
            cnn.Close();
        }

        // write out CSV data
        using (var wtr = new StreamWriter(csvOutputFile))
        {
            foreach (DataRow row in dt.Rows)
            {
                bool firstLine = true;
                foreach (DataColumn col in dt.Columns)
                {
                    if (!firstLine) { wtr.Write(","); } else { firstLine = false; }
                    var data = row[col.ColumnName].ToString().Replace("\"", "\"\"");
                    wtr.Write(String.Format("\"{0}\"", data));
                }
                wtr.WriteLine();
            }
        }
    }

如何解决这个问题?

4

1 回答 1

125

您可能在其中存在 File 方法的 MVC 控制器中有此方法。添加您的代码System.IO.File而不是File

于 2013-05-10T04:56:43.600 回答