2013-07-13 35 views
1

好的,所以我創建的程序就像是一個Android的桌面恢復。現在,爲了執行命令,例如擦除緩存,命令需要輸入並保存到.sh文件。當我打開一個像記事本++這樣的程序並輸入一個命令(即擦除緩存)並將其保存爲一個unix腳本文件(.sh),並將其加載到我的手機中時,它將毫無問題地執行。但是,當我嘗試在使用流編寫器的程序中執行此操作並將文件另存爲.sh時,手機上的恢復無法讀取它。即使這些文件看起來完全一樣。如何在C#中創建Unix腳本(.sh)文件?

好吧,我知道這可能有點令人困惑,但照片這。

關於記事本++ 我創建了一個新文檔,輸入,擦除緩存,保存爲Unix腳本(.sh),並且完美地工作。

在我的計劃

FileInfo fi2 = new FileInfo("flash.sh"); 
      StreamWriter writebat2 = fi2.AppendText(); 
      string f = "wipe cache"; 
      writebat2.WriteLine(f); 
      writebat2.Close(); 

現在,他們都產生一個文件(flash.sh)具有完全相同的內容。但是,用我的程序創建的那個不能被恢復讀取。有任何想法嗎?謝謝。

回答

2

UNIX文本文件行尾(帶單個字符\n)和Windows行尾(帶有兩個字符\r\n)之間有區別。

所以在Windows中有一個額外的字符,這可能是什麼導致您的問題,當文件傳輸到您的Android設備。

當您在Notepad ++中創建文件時,它的工作原理是,當您將其保存爲.sh時,它會將其識別爲UNIX bash腳本文件類型,並智能地不會將額外的Windows字符放在每行末尾。

但是你寫的C#代碼DOES會提供額外的字符,因爲它沒有那種類型的輸出文件類型的意識。

你需要輸出的文本文件而無需額外的字符,使用something like the following for the write operation

File.WriteAllText(myOutputFile, string.Join("\n", lines)); 

或者更簡單,只需使用write()並添加UNIX換行符來自己:

string f = "wipe cache\n"; 
writebat2.Write(f); 
+0

你先生是驚人的。它工作完美,謝謝!很好的解釋,我認爲這可能與編碼或字符有關,但不太確定。 – Movieboy

相關問題