畫面如下,其中的"選擇存檔位置"和他下面的textbox、跟"儲存"這三個物件的enable都是false,上傳檔案格式正確才改成true,同時這三個物件的Anchor屬性都設成left、bottom,因為我們要讓Form和Textbox跟著讀入的資料行數一起變長。
首先要先加這個
首先要先加這個
using System.IO;
其中if的判斷是因為當使用者點了選擇檔案,卻沒有選擇檔案直接按取消時(此時檔案路徑為null),會導致openFileDialog產生"空白路徑不合法"的錯誤,所以在前面先做一個判斷避免掉這個錯誤。
這兩行則是當每讀一行,textbox跟form就會多10px,這樣視窗會跟著讀入的行數變化,稍稍好看一些些。
附件下載
txtShowResult.Height += 10;
this.Height += 10;
這兩行則是當每讀一行,textbox跟form就會多10px,這樣視窗會跟著讀入的行數變化,稍稍好看一些些。
string strUploadPath = " ";//上傳路徑
string strSavePath = " ";//儲存路徑
string strFileName = " ";//檔案名稱
string strContent = " ";//檔案內容
public Form1()
{
InitializeComponent();
}
private void btnSelectPath_Click(object sender, EventArgs e)
{
ClearAll();
openFileDialog1.Filter = "純文字檔(*.txt)|*.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strUploadPath = openFileDialog1.FileName;
strFileName = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
}
else
{
return;
}
Encoding big5 = Encoding.GetEncoding(950);
StreamReader sr_txt = new StreamReader(strUploadPath, Encoding.Default);
while (!sr_txt.EndOfStream)
{
string line = sr_txt.ReadLine();
byte[] data = big5.GetBytes(line.Trim('\r'));
if (data.Length != 80)
{
MessageBox.Show("檔案內容錯誤,請重新選擇正確的檔案");
return;
}
else
{
string CARDNO = big5.GetString(data, 0, 2).Trim() + "3";//卡別
string OFFNO = big5.GetString(data, 3, 7).Trim();//受託局號
string SPACE1 = " ";//6個空白
string GIRONO = big5.GetString(data, 16, 8).Trim();//劃撥帳號
string PAYDAY = "1" + big5.GetString(data, 24, 6).Trim();//轉存日期
string ACCTOFF = big5.GetString(data, 30, 7).Trim();//立帳局號
string ACCTNO = big5.GetString(data, 37, 7).Trim();//立帳帳號
string IDNO = big5.GetString(data, 44, 10).Trim();//身分證字號
string NETPAY = "0" + big5.GetString(data, 54, 6).Trim();//轉存金額
string SPACE2 = " ";//18個空白
line = CARDNO + OFFNO + SPACE1 + GIRONO + PAYDAY + ACCTOFF + ACCTNO + IDNO + NETPAY + SPACE2;
strContent += line + Environment.NewLine;
}
txtShowResult.Height += 10;
this.Height += 10;
}
btnSave.Enabled = true;
btnSavePath.Enabled = true;
txtSavePath.Enabled = true;
txtShowResult.Text = strContent;
sr_txt.Close();
sr_txt.Dispose();
}
但不能直接改form的長寬,要先設定,所以要加入這段,把form的長寬抓出來。 private void Form1_Load(object sender, EventArgs e)
{
//抓解析度
int Height = Screen.PrimaryScreen.Bounds.Height;
int Width = Screen.PrimaryScreen.Bounds.Width;
// 設定 Form Size
this.Width = Width;
this.Height = Height;
}
選擇存檔位置,檔名用原檔名加上 _new 表示,其中C#是用 "\\"表示單斜線 \ private void btnSavePath_Click(object sender, EventArgs e)
{
FolderBrowserDialog path = new FolderBrowserDialog();
path.ShowDialog();
if (path.SelectedPath != "")
strSavePath = path.SelectedPath + "\\" + strFileName + "_new.txt";
this.txtSavePath.Text = path.SelectedPath;
}
存檔時為避免錯誤做了一些判斷,System.IO.File.Exists(檔案路徑)是用來判斷該路徑存不存在檔案的,如果不做檔案是否存在的判斷的話他會一直往下加,所以當檔案存在時,用File.WriteAllText做覆蓋,反之如檔案不存在時適用AppenAllText。private void btnSave_Click(object sender, EventArgs e)
{
if (txtSavePath.Text == "")
{
MessageBox.Show("請選擇路徑");
return;
}
try
{
if (System.IO.File.Exists(strSavePath))
{
//檢查檔案是否已存在
DialogResult myResult = MessageBox.Show("檔案已存在,是否覆蓋?", "檔案已存在", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (myResult == DialogResult.Yes)
{
File.WriteAllText(strSavePath, strContent);//已存在則覆蓋
MessageBox.Show("儲存成功!");
ClearAll();
}
else if (myResult == DialogResult.No)
{
MessageBox.Show("已取消,請重新選擇位置!");
}
}
else
{
File.AppendAllText(strSavePath, strContent);
MessageBox.Show("儲存成功!");
ClearAll();
}
}
catch
{
MessageBox.Show("儲存失敗!");
ClearAll();
}
}
為了更直覺也讓畫面更整齊加入的ClearAll,在清除畫面的同時把長度預設回原本的樣子,比較符合使用上的感覺。 private void ClearAll()
{
strUploadPath = "";
strSavePath = "";
strFileName = "";
strContent = "";
txtSavePath.Text = "";
txtShowResult.Text = "";
this.Height = 230;
txtShowResult.Height = 25;
}
附件如下,測試檔案也在裡面,測試檔案中的文字都是亂打的,沒有隱私問題。附件下載
沒有留言:
張貼留言