0

我有以下错误:

  The process cannot access the file because it is being used by another process. 

试图保存文件然后阅读它,请你能帮我修复代码吗?

 protected void Button1_Click(object sender, EventArgs e)
 {  
    string path = "\\\\nasouts01\\CodiceDiRete\\temp\\";



    if (FileUpload1.HasFile)
    {
        string fileExt = 
           System.IO.Path.GetExtension(FileUpload1.FileName);

        if (fileExt == ".csv")
        {
            try
            {

                FileUpload1.SaveAs(path + FileUpload1.FileName);

            }
            catch (Exception ex)
            {
                Label1.Text = "ERROR: " + ex.Message.ToString();
            }
            finally
            {
                FileUpload1.PostedFile.InputStream.Flush();
                FileUpload1.PostedFile.InputStream.Close();
                FileUpload1.FileContent.Dispose();    
                //Release File from Memory after uploading
            }
        }
        else
        {
            Label1.Text = "Selezionare soltanto file .csv";
            gwreportpub.Visible = false;
            ButtonConferma.Visible = false;
            ButtonAnnulla.Visible = false;
            ButtonPulisci.Visible = false;
            return;
        }
    }
    else
    {
        Label1.Text = "Inserire un file ";
        gwreportpub.Visible = false;
        ButtonConferma.Visible = false;
        ButtonAnnulla.Visible = false;
        ButtonPulisci.Visible = false;
        return;
    }
    /*
    Validazione nel file , dopo visualizzazione dei dati nella tabella 
    */
    int count  = 0;
    string line;

    // Read the file and display it line by line.
    using (System.IO.StreamReader file = 
    new System.IO.StreamReader(path+FileUpload1.FileName))
    {
    while((line = file.ReadLine()) != null)
    {
       count = line.Split(',').Length;
       if(count != 12){

         Label1.Text = "Il file non contiene il numero esatto di campi che servono al caricamento";
         gwreportpub.Visible = false;
         ButtonConferma.Visible = false;
         ButtonAnnulla.Visible = false;
         ButtonPulisci.Visible = false;
         return;

       }
    }

    file.Close();
    }
    /*
    Prendo il valore della sequence
    */
    OracleCommand sequenceCmd = new OracleCommand("select ls_seq_batchrequest.nextval from dual",connection);
    OracleDataReader reader = sequenceCmd.ExecuteReader();
    int sequenceVal=0;
    while (reader.Read())
    {
        //dropdownlist1.Items.Insert(0, new ListItem(reader.GetString(0), reader.GetString(0)));
        sequenceVal = reader.GetInt32(0);
    }
    reader.Close();

    Session["sequenceVal"] = sequenceVal;

    /*
    Faccio l'inserimento a db dei dati e visualizzo la tabella
    */
    OracleTransaction myTrans = null;


    OracleCommand cmd = new OracleCommand("INSERT INTO ZTMP_SAM_TB_ELAB_PDR(facilityid,taxid,plantcode,ca_pdr, fullmeterkey_m1, corrmeterid_m1, " + 
    "stopreading_m1, corrstopreading_m1,fullmeterkey_m2, corrmeterid_m2, " + 
    "stopreading_m2, corrstopreading_m2, stopreadtime_m1,stopreadtime_m2,uidbatchrequest) " + 
    "  VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15)", connection);
    //myTrans = connection.BeginTransaction();
    //cmd.Transaction = myTrans; 
    /*
    ( :facilityid,:taxid,
    :plantcode,:capdr,:fullmetkeym2,
    :corrmetidm2,:stopreadingm2,
    :corrstopreadm2,:fullmetkeym1,
    :corrmetidm1,:stopreadingm1,:corrstopreadm1,
    :stopreadtimem2,:stopreadtimem1)
    */
    using (System.IO.StreamReader file2 = 
    new System.IO.StreamReader(path+FileUpload1.FileName))
    {
    //System.IO.StreamReader file2 = new System.IO.StreamReader(path+FileUpload1.FileName);
    try
    {
    while((line = file2.ReadLine()) != null)
    {
       string[] split = line.Split(',');


       cmd.Parameters.Add("1", OracleType.VarChar, 64).Value = split[0];
       cmd.Parameters.Add("2", OracleType.VarChar, 64).Value = "";
       cmd.Parameters.Add("3", OracleType.VarChar, 64).Value = "";
       cmd.Parameters.Add("4", OracleType.Number).Value = Convert.ToInt32(split[1]);
       cmd.Parameters.Add("5", OracleType.VarChar, 64).Value = split[6];
       cmd.Parameters.Add("6", OracleType.VarChar, 64).Value = split[7];
       cmd.Parameters.Add("7", OracleType.Number).Value = Convert.ToInt32(split[8]);
       cmd.Parameters.Add("8", OracleType.Number).Value = Convert.ToInt32(split[9]);
       cmd.Parameters.Add("9", OracleType.VarChar, 80).Value = split[2];
       cmd.Parameters.Add("10", OracleType.VarChar, 80).Value = split[3];
       cmd.Parameters.Add("11", OracleType.Number).Value = Convert.ToInt32(split[4]);
       cmd.Parameters.Add("12", OracleType.Number).Value = Convert.ToInt32(split[5]);
       DateTime date1,date2;

       DateTime.TryParseExact(split[10], "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out date1);
       DateTime.TryParseExact(split[11], "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out date2);

       cmd.Parameters.Add("13", OracleType.DateTime).Value = date1;
       cmd.Parameters.Add("14", OracleType.DateTime).Value = date2;
       cmd.Parameters.Add("15", OracleType.Number).Value = sequenceVal;

       cmd.ExecuteNonQuery();


       /*Per ogni elemento esegui l'insert*/
    }
    //myTrans.Commit();
    }   
    catch(Exception ex){

      //myTrans.Rollback(); 
      Label1.Text = ex.Message;
      return;
    //"Si e' verificato un errore nell'inserimento dei dati nella tabella ZTMP_SAM_TB_ELAB_PDR";
    }


    file2.Close();
    }


  }
4

1 回答 1

0

你可以做两件事来解决这个问题

  1. 使用名称中的时间戳保存文件并处理该副本

  2. File.ReadLine如果文件是 CSV,则使用方法。

于 2013-05-17T15:36:48.630 回答