好吧,所以我正在创建的程序就像 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();
Run Code Online (Sandbox Code Playgroud)
现在他们都生成一个内容完全相同的文件(flash.sh)。然而,用我的程序创建的文件无法被恢复读取。有任何想法吗?谢谢。
UNIX 文本文件行尾(使用单个字符\n)和 Windows 行尾(使用两个字符\r和\n)之间存在差异。
因此,在 Windows 中存在一个额外的字符,这可能就是在将文件传输到 Android 设备时导致问题的原因。
当您在 Notepad++ 中创建文件时它起作用的原因是,当您保存时,.sh它会将其识别为 UNIX bash 脚本文件类型,并且智能地不会在每行末尾放置额外的 Windows 字符。
但是您编写的 C# 代码确实放置了额外的字符,因为它没有这种类型的输出文件类型识别能力。
您需要输出没有额外字符的文本文件,使用如下所示的写入操作:
File.WriteAllText(myOutputFile, string.Join("\n", lines));
Run Code Online (Sandbox Code Playgroud)
或者更简单,只需write()自己使用并添加 UNIX 换行符:
string f = "wipe cache\n";
writebat2.Write(f);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |