2010-09-09 103 views
0

我有一個程序,我用它來寫入數據到一個excel文件....同時我使用一個excel文件從第一個excel文件導入數據使用(導入數據)工具。該進程無法訪問該文件

這是程序代碼的一部分:

private void Log(string pText) 
{ 
    //textBox1.AppendText(pText + "\r\n"); // does not put cr lf, why? 
    this.BeginInvoke(new MethodInvoker(delegate() { 
     textBox1.AppendText(pText); 
     textBox1.AppendText("\n"); 
    })); 
} 

private void LogStatus(string pText) 
{ 
    textBox1.AppendText(pText + "\t"); 
    textBox1.AppendText("\n"); 
} 


StreamWriter theString = new StreamWriter(FileName + ".csv", true); 
theString.WriteLine(DateTime.Now + dataToSave + "\t\n"); 
theString.Close(); 

我的問題是,當我開始debuge我的程序在Visual C#2008

它會工作的意願,並開始將數據寫入到第一個Excel文件....然後在調試過程中

我想從第一個Excel文件導入數據到第二個使用導入數據(這對我來說很重要,我不能延遲導入過程)

的調試運行過程停止,視覺C#2008 higlight這行代碼


theString.Close(); 

和彈出消息給我說

該進程無法訪問,因爲另一個文件進程已鎖定文件的一部分。

在解決這個問題的任何幫助PLZ

,並感謝

+1

看起來問題在於創建* first *文件。你是否正確關閉文件呢? – 2010-09-09 08:34:06

+1

Excel是否仍然打開文件?如果是這樣,那就是問題所在。 – leppie 2010-09-09 08:34:23

+0

我不打開第一個Excel文件..我使用另一個導入數據形式的第一個(進口是我必須)我不能延遲導入COS。我有很多實時寫入的數據,我想用導入函數(也是實時)來查看數據 – user443192 2010-09-09 08:35:47

回答

0

請向我們提供這也開啓了第一個文件中的代碼,所以我們可以看到這裏的大圖片。

很顯然,這個文件被鎖定的地方,即使您使用StreamReader自己讀取和寫入文件,也可能出現這種情況。

因此,您的問題不在於此代碼,而是恰巧鎖定文件的代碼。

當然,該文件也可能被另一個應用程序鎖定,但如果這是一個只被程序使用的文件,那麼它不應該是一個問題。

您是否使用任何Excel interop來首先讀取文件?難道你沒有正確地從那裏關閉文件,並且Excel仍然打開這個文件?在這種情況下,即使Excel看起來沒有運行,您也可以檢查是否在計算機上運行了Excel.exe進程。

+0

嗨,我只需添加程序用於寫入Excel文件的代碼的其他部分 – user443192 2010-09-09 09:05:21

+0

我看到你使用了BeginInvoke,它使得你提供的委託異步運行。既然你只是在這裏給你的代碼的一部分,我只能猜測,但我認爲讀取文件的異步代碼可能沒有完成運行,因此鎖定了這個文件。 – 2010-09-09 09:31:16

0

也許你有一個開放的流或某事。關閉它們並重試。

相關問題