3

好的,所以我正在创建的程序就像 android 的桌面恢复。现在,为了执行命令,例如擦除缓存,需要输入命令并保存到 .sh 文件中。当我打开notepad++之类的程序并输入命令(即擦除缓存)并将其保存为unix脚本文件(.sh)并将其加载到我的手机中时,它可以毫无问题地执行。但是,当我尝试在我的程序中使用流编写器执行此操作并将文件另存为 .sh 时,我手机上的恢复无法读取它。即使文件看起来完全相同。

好的,我知道这可能有点令人困惑,但请想象一下。

在 Notepad++ 上,我创建了一个新文档,输入,擦除缓存,保存为 Unix 脚本 (.sh),并且运行良好。

在我的程序中

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

现在它们都生成了一个内容完全相同的文件 (flash.sh)。但是,使用我的程序创建的程序无法被恢复读取。有任何想法吗?谢谢。

4

1 回答 1

5

\nUNIX 文本文件行尾(带有单个字符)和 Windows 行尾(带有两个字符\r和)之间存在差异\n

所以在 Windows 中有一个额外的字符,当文件传输到您的 Android 设备时,这可能是导致您出现问题的原因。

在 Notepad++ 中创建文件时它起作用的原因是,当您保存时.sh它会将其识别为 UNIX bash 脚本文件类型,并且智能地不会将额外的 Windows 字符放在每行的末尾。

但是您编写的 C# 代码确实放置了额外的字符,因为它没有那种类型的输出文件类型意识。

您需要在没有额外字符的情况下输出文本文件,使用如下内容进行写入操作

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

或者更简单,只需write()自己使用并添加 UNIX 换行符:

string f = "wipe cache\n";
writebat2.Write(f);
于 2013-07-13T19:04:05.200 回答