gpt4 book ai didi

c# - 如何在 C# 中创建 Unix 脚本 (.sh) 文件?

转载 作者:行者123 更新时间:2023-11-29 17:58:19 27 4
gpt4 key购买 nike

好吧,我正在创建的程序就像是 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)。但是,恢复无法读取用我的程序创建的那个。有任何想法吗?谢谢。

最佳答案

UNIX 文本文件行尾(使用单个字符 \n)和 Windows 行尾(使用两个字符 \r\n)。

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

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

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

您需要使用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);

关于c# - 如何在 C# 中创建 Unix 脚本 (.sh) 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com