2013-07-13 36 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

相关问题