2011年1月25日 星期二

asp.net_寫入文字檔(*.txt)(清除原內容與接續原內容)與讀取文字檔

最近有一個需求,需要呼叫別人已經完成的exe檔(轉換程式)。

正常的想法是,在asp.net的頁面上讓使用者輸入需要轉換的值,直接傳入後端EXE檔後,接輸出值再放回頁面上;

但是該EXE檔的輸入參數為"輸入檔檔名"及"輸出檔檔名",

所以程序就變成:
1. 使用者輸入需要轉換的值。
2. 先將該輸入值寫入一個檔案內。
3. 呼叫EXE檔,並帶有輸出、輸入檔名參數。
4. 打開EXE所產製的輸出檔,將其內容讀出,並顯示於頁面上。

流程圖就像是:

-------------------------------------------------
整個流程會遇到三個問題:
1. 如何將資料寫入一個伺服器上的txt檔內。
2. 如何透過asp.net呼叫伺服器上的exe檔,並帶參數給他。
3. 如何讀出伺服器上的txt檔,顯示於頁面。
-------------------------------------------------

首先,第一個:將資料寫入txt檔內
1. 保留原始內容,不斷將新的加在後面。

string Dir = page.Server.MapPath("~/");
StreamWriter sw = File.AppendText(Dir + "input.txt");
sw.WriteLine("第一行");
sw.WriteLine("第二行");
sw.Flush();
sw.Close();

2. 不保留原始內容,每次寫入都是重新開始。

string Dir = page.Server.MapPath("~/");
StreamWriter sw = new StreamWriter(Dir + "input.txt")
sw.WriteLine("第一行");
sw.WriteLine("第二行");
sw.Flush();
sw.Close();

兩個只差在一個是File.AppendText去指定特定檔案Append;另一個則是new一個新的。

--------------------------------------------

然後相對的第三個問題,把伺服器上的txt檔讀出來。

StreamReader MySF = new StreamReader(Dir + "output.xyz", System.Text.Encoding.Default);
value = MySF.ReadToEnd();
MySF.Close();

或是利用單行讀取。

while (!MySF.EndOfStream)
{
value += MySF.ReadLine() + "\r\n"; //讀取單行
}


第二個問題下一篇。

5 則留言:

Andre Kao 提到...

為什麼寫出的檔案沒有問題,但是下載後會加載其他程式碼??

ola的家 提到...

你說的其他程式碼是指什麼內容?

匿名 提到...

aspx code會附於檔案內容中嗎?!

ola的家 提到...

你是說txt檔會不會有程式碼寫在裡面?

不會。

ola的家 提到...

如果你下載這個文字檔,發現後面有html碼,表示你下載的那隻aspx最後沒有加上Response.End();

張貼留言