2017-04-15 40 views
0

這個問題已被問了很多次,但我不確定我是否找到正確的答案,這將是「這是不可能的」。每次我聽到一些事情都是不可能的,我不確定它是否屬實。我的意思是不知何故就有了解決辦法。C#讀取完全鎖定或讀取輸出以外的文本文件,如果語句

所以這是我的事情。我正在研究C#應用程序,它在某些時候應該讀取要在我的代碼中使用的.txt文件。問題是一個C++文件不斷寫入這個文件。我沒有這個項目的來源。

根據我的理解,即使鎖定了文件,也有幾種讀取文件的方法。問題是我試了一下。 (使用ReadWrite,Read,Write,Delete等)。似乎沒有任何成功。它看起來像文件被一切手段鎖定。

所以我的問題再一次,是真的有可能沒有辦法讀取文本文件,如果它被其他應用程序完全鎖定,我沒有來源?有沒有辦法?

如果不存在以下情況。應用程序本身打印出我想要從txt文件中讀出的完全相同的信息。所以我想,爲什麼不直接從應用程序讀取它。問題在於,我不知道如何在「if」語句之外做到這一點。

例如我的代碼是:

if (wname.Length) 
{ 

    Process compiler = new Process(); 
    compiler.StartInfo.FileName = fn; 
    compiler.StartInfo.WorkingDirectory = wd; 
    compiler.StartInfo.UseShellExecute = false; 
    compiler.StartInfo.RedirectStandardOutput = true; 
    compiler.StartInfo.CreateNoWindow = true; 
    compiler.Start(); 

} 

什麼,我想這樣做以後是:

string result = compiler.StartInfo.ReadToEnd(); 

從來沒有少,這是不可能的,因爲「名「編譯器'在當前上下文中不存在「。

失去IF語句是不可能的。任何解決方案?

在此先感謝。

+0

只需在if範圍外創建'compiler'對象。 –

+0

此外 - 看起來你有兩個不同的問題在這裏 - 一個 - 具體關於你得到的錯誤,第二個關於如何讀取其他文件.. –

回答

1

compiler定義在if (wname.Length)聲明的範圍內。 包含該錯誤的行顯示在該範圍之外,因此您會收到該編譯錯誤。

定義compiler外部或if語句,然後您將它在另一行的範圍內。但是,如果你不初始化if語句之外,那麼你需要檢查它是不是null使用,否則之前,你會得到一個NullReferenceException

更多閱讀有關scopes in C#

2

「是不是真的有可能存在如果文本文件被其他應用程序完全鎖定,則無法讀取文本文件「 - 取決於正在使用的操作系統和文件系統。你不告訴我們你在用什麼,那我們該如何回答?有些系統使用內核強制強制文件鎖定,有些只使用建議鎖定,有些可以同時使用。在任何情況下,你問是否「可能」 - 在極端情況下,如果繞過操作系統並直接操縱磁盤上的原始數據,那當然是可能 - 很難;當然,但可能。 如果你想留在操作系統的美好世界中,那麼它依賴於(如上所述)操作系統和文件系統以及所使用的文件鎖的類型。