2021年8月24日 星期二

C# - 寫入文字檔

 (1) 直接寫入,只能寫一次,因為會覆蓋

  string str1 = " welcome , hello , 12345 ";

  string str2 = " welcome , hello , 54321 ";

  // 將資料寫入,若檔案已存在則會被覆蓋

  System.IO.File.WriteAllText("hello.txt", str1); 

  // 寫入完畢,立即關閉,只能保留最後一次的寫入資料

  System.IO.File.WriteAllText("hello.txt", str2);

  MessageBox.Show("OK");

結果 

最後寫入結果只保留最後一次的資料


(2) 可以寫入多行但是還是有覆蓋的情形,使用 StreamWriter

 string str1 = " welcome , hello , 12345 ";

 string str2 = " welcome , hello , 54321 ";

 // using System.IO; 

 // 資料存在則會覆蓋

using (StreamWriter outputFile = new StreamWriter("WriteText1.txt"))

            {

                outputFile.WriteLine(str1);

                outputFile.WriteLine(str2);

                // 寫入完畢會自動關閉

                WriteToFile( outputFile, "1233456789");

            }             

MessageBox.Show("OK");

結果:可以寫入多行,但是下一次時,資料還是會被清除再來一次


(3) 可以寫入多行,可以附加資料,使用 StreamWriter,僅在宣告時有小細節,注意紅字部分

 string str1 = " welcome , hello , 12345 ";

string str2 = " welcome , hello , 54321 ";

// using System.IO; 

// 資料存在則會附加

using (StreamWriter outputFile = new StreamWriter("WriteText2.txt", true))

            {

                outputFile.WriteLine(str1);

                outputFile.WriteLine(str2);

                // 寫入完畢會自動關閉

                WriteToFile(outputFile, "ABCDEFGHIJK");

            }

MessageBox.Show("OK");


共用

 private void WriteToFile( StreamWriter a, string str1)

        {

            a.WriteLine(str1);

        }




C# 動態新增控制項(Windows From)

原始碼 

VS2019 C#  Windows From

// 

private void button2_Click(object sender, EventArgs e)

        {

            addButton(this, "hello1",100,100,50,50);

            addButton(tabPage1, "hello2", 0, 100, 50, 50);

            addButton(tabPage2, "hello3", 0, 100, 50, 50);

        }

// ==========================================================

        private void addButton(Control a , string butText , int x , int y , int width , int Height)

        {

            Button Obj_Button = new Button();

            Obj_Button.FlatStyle = FlatStyle.Standard;

            Obj_Button.BackColor = Color.FromArgb(200, 250, 250);

            Obj_Button.ForeColor = Color.Black;

            Obj_Button.UseVisualStyleBackColor = true;

            Obj_Button.Height = Height;

            Obj_Button.Width = width;

            Obj_Button.Location = new Point(x, y);

            Obj_Button.Visible = true;

            Obj_Button.Name = butText;

            Obj_Button.Text = butText;

            Obj_Button.Tag = butText;

            Obj_Button.TextAlign = ContentAlignment.MiddleLeft;

            Obj_Button.Click += new EventHandler(Buttons_Click);

            a.Controls.Add(Obj_Button);

        }


// =====  新增事件 =======================

 void Buttons_Click(object sender, EventArgs e)

        {

            this.Text = (sender as Button).Text;

        }

2021年8月4日 星期三

圖檔存入資料庫

 圖檔存入資料庫

有時候,有些資料除了文字之外還會有一些圖檔,所以就有一個想法,把圖檔變成一個欄位值也就是一對二進位碼,然後存到資料庫內,需要的時候再把資料取出,回組成圖檔,如此一來就不用文字+圖片分離了。

VB.NET

 Dim myPhoto As Byte() = My.Computer.FileSystem.ReadAllBytes(img_FileName)

# img_FileName:圖檔檔名,完整路徑+檔名

# 宣告 myPhoto 為位元 

# 資料庫內的欄位要宣告成 <Image>,使用的資料庫是MS-SQL2012。

Dim myphoto As Byte() = rs1("img_Pic") ' 從資料庫內讀出的二進位欄位          

Dim MyFile As FileStream '串流

 Dim imgFileName As String = "aa.png" ' 要還原的圖檔名稱,要注意副檔名,簡單說不能從存入jpg讀出變成png

MyFile = File.Open(imgFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) ' 開啟檔案寫入模式

Dim myWriter As BinaryWriter = New BinaryWriter(MyFile) ' 開啟寫入器

myWriter.Write(myphoto) ' 寫入檔案 

myWriter.Close() ' 關檔

以下利用讀寫來進行圖檔的複製


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim imgFileName As String = ""
        Try
            OpenFileDialog1.Filter = "*.png|*.png"
            OpenFileDialog1.ShowDialog()
            imgFileName = OpenFileDialog1.FileName
        Catch ex As Exception
        End Try
        If System.IO.File.Exists(imgFileName) Then
            txt_FileName.Text = imgFileName
            PictureBox1.ImageLocation = imgFileName
            txt_name_1.Text = System.IO.Path.GetFileName(imgFileName)
            txt_name_2.Text = System.IO.Path.GetExtension(imgFileName)
            Dim extName As String = System.IO.Path.GetExtension(imgFileName)
            Dim myByte As Byte() = image_to_Byte(imgFileName)
            PictureBox2.ImageLocation = Save_to_img(myByte, extName)
        End If
    End Sub

Function image_to_Byte(ByVal img_FileName As String) As Byte()
        Dim a As Byte() = My.Computer.FileSystem.ReadAllBytes(img_FileName)
        Return a
End Function

Function Save_to_img(ByRef myBytea As Byte(), ByVal extName As String) As String
        Dim MyFile As FileStream '串流
        Dim imgFileName As String = "aa" + extName  ' 要還原的圖檔名稱,要注意副檔名,簡單說不能從存入jpg讀出變成png
        MyFile = File.Open(imgFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) ' 開啟檔案寫入模式
        Dim myWriter As BinaryWriter = New BinaryWriter(MyFile) ' 開啟寫入器
        myWriter.Write(myBytea) ' 寫入檔案 
        myWriter.Close() ' 關檔
        Return imgFileName
End Function









         


DiCom 篇

 首先,要找到參考資料 (1) dicomlibrary: https://www.dicomlibrary.com/dicom/dicom-tags/  ,認識DiCom 的標籤。 (2) 再來一個參考文件: 數位醫學影像去識別化實作指引手冊 (3)DiCom 元件: GitH...