iT邦幫忙

0

如何用C#存成Big5文件

不明 2023-09-11 16:20:541730 瀏覽
  • 分享至 

  • xImage

大家好,這是我第一次發文

想請問一個問題,我是自學C#,目前還在努力中

最近我有幫別人寫一個小工具,可以用來產生批次匯入工作排程的bat

但是由於他手上的系統比較舊,在他電腦上產生bat時會出現中文的排程亂碼問題

目前來說只要將bat重新用Big5儲存就好,我想詢問我可以怎麼做去做到儲存成Big5?

或是依照對方電腦去設定預設儲存的格式嗎?

程式不是我原創,是google後東拼西湊而成,所以有些概念可能不是很熟悉

希望能得到一些幫助

謝謝

static void Main(string[] args)
        {
           // StreamReader file = new StreamReader(@"C:\Temp\Run.bat", Encoding.Default);

            string path = @"C:\Temp\Run.bat";
            
            DirectoryInfo di = new DirectoryInfo(@"C:\Temp\");
            FileInfo[] files = di.GetFiles("*xml");


            using (StreamWriter sr = File.AppendText(path))
            {
                sr.WriteLine("cd %~dp0");
            }
            for (int i = 0; i < files.Length; i++)
            {
                //Stream可以持續存入字串而不會覆蓋
                using (StreamWriter sr = File.AppendText(path))
                {
                //此段落可以組合出schtasks.exe /Create /XML "test.xml" /tn "test" 的排程名稱。
                //Path.GetFileNameWithoutExtension用來無視附檔名,files[i].ToString()則是強制轉字串,否則無法編譯
                    sr.WriteLine("schtasks.exe /Create /XML " + '"' + files[i] + '"' + " /tn " + '"' + Path.GetFileNameWithoutExtension(files[i].ToString()) + '"');
                }

            }

            using (StreamWriter sr = File.AppendText(path))
            {
                sr.WriteLine("pause");
            }
            

        }

圖片補充:
https://ithelp.ithome.com.tw/upload/images/20230911/20162474w8vaRL1rdx.jpg

後來也有找到另一個方法,可以增加可用性

那就是我直接在生成的CMD中放入編碼更改

User自己可以自由的輸入自己系統能用的編碼,這樣子不管誰去使用,都不會有問題了

謝謝大家的幫忙

看更多先前的討論...收起先前的討論...
不明 檢舉
目前依然在努力改進,如果有得到答案,屆時會上來提供解方
天黑 iT邦研究生 5 級 ‧ 2023-09-11 16:44:09 檢舉
請教一下 亂碼部分在哪裡? 有畫面嗎? 上面程式我只看到 讀取檔案名稱副檔名 然後append 到bat的邏輯 亂碼部分是? 檔名有中文?
天黑 iT邦研究生 5 級 ‧ 2023-09-11 16:56:25 檢舉
補充 File.AppendText 會轉UTF-8 (參考: https://learn.microsoft.com/zh-tw/dotnet/api/system.io.file.appendtext?view=net-7.0)
淺水員 iT邦大師 6 級 ‧ 2023-09-11 17:07:31 檢舉
StreamWriter 可以在建構函式指定編碼
https://learn.microsoft.com/zh-tw/dotnet/api/system.io.streamwriter.-ctor?view=net-7.0
不明 檢舉
我匯出的排程中,排程是中文命名,當我用程式去匯出成bat的時候,我用編輯打開bat是正常的中文,但是執行這支bat會變成亂碼,狀況大概這樣
不明 檢舉
感謝兩位提供文章,這兩篇目前正在看,只是要研究一下怎麼去改,謝謝幫忙
xdxxx iT邦新手 4 級 ‧ 2023-09-15 13:30:46 檢舉
你是用視窗程式嗎? 如果是的話, 可以利用 MEMO 元件來做.
不明 檢舉
xdxxx,不好意思我不太懂你的意思
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
allenlwh
iT邦高手 1 級 ‧ 2023-09-11 17:31:08
最佳解答
string path = @"D:\Temp\Run.bat";
FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);

StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("big5"));
for (int i = 1; i < 6; i++)
{ 
    sw.WriteLine("現在時間是:" + DateTime.Now.AddMinutes(i));
    sw.WriteLine(Environment.NewLine);
}

sw.WriteLine("pause");
sw.Flush();
sw.Close();
fs.Close();

https://ithelp.ithome.com.tw/upload/images/20230911/20033493oF3RU97FPJ.png

不明 檢舉

這個方法也不錯呢,謝謝提供思路

我要發表回答

立即登入回答