반응형

* C# Json 파일 읽기 쓰기 예제...

(System.Net.Json.dll) 파일 참조 

 

System.Net.Json.dll
0.02MB

위 첨부된 파일을 다운 받아 dll 참조 추가를 해줍니다.

오른쪽에 솔루션 탐색기가 나타나지 않는다면, 상단 메뉴 (보기) -> (솔루션탐색기) 를 선택 해 줍니다.

 

참조에서 마우스 오른쪽버튼 클릭

 

찾아보기 탭에서 System.Net.Json.dll 파일 위치를 찾아가셔서 클릭 후 추가 해 줍니다.

참고로 저 같은 경우 항상 참조 dll 은 프로젝트 생성 폴더에 같이 놔두기에 위와 같이 바로 찾을 수 있음.

 

참조가 정상적으로 이루어 졌음 위와 같은 그림이 나오게 됩니다.

 

* 예제 메인화면

전체 소스코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net.Json;

namespace CSharp_JsonFileReadWrite
{
    public partial class Form1 : Form
    {
        //현재 EXE 파일이 생성 되는 폴더 위치
        string strLocalPath = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //파일이 존재한다면 삭제...
            if (System.IO.File.Exists(strLocalPath + "\\Test.json"))
            {
                System.IO.File.Delete(strLocalPath + "\\Test.json");
            }

            //Json Write...
            JsonObjectCollection root = new JsonObjectCollection();

            //Json Title 정하기 Server_Info
            JsonArrayCollection jacServer = new JsonArrayCollection("Server_Info");

            //Json Title 에 속한 노드(속성) 만들기
            JsonObjectCollection joc = new JsonObjectCollection();
            joc.Add(new JsonStringValue ("IP", "192.168.0.11"));
            joc.Add(new JsonStringValue("PW", "1231231231"));
            joc.Add(new JsonStringValue("DataBase", "TEST"));
            jacServer.Add(joc);

            JsonArrayCollection jacTest = new JsonArrayCollection("Test_Info");
            JsonObjectCollection joc2 = new JsonObjectCollection();
            joc2.Add(new JsonStringValue("X", "100"));
            joc2.Add(new JsonStringValue("Y", "200"));
            joc2.Add(new JsonStringValue("Z", "300"));
            jacTest.Add(joc2);

			//최상위 노드에 속성 노드 추가
            root.Add(jacServer);
            root.Add(jacTest);

            //파일에 쓰기...
            string strRoot = root.ToString();
            textBox1.Text = strRoot;
            System.IO.File.WriteAllText("Test.json", strRoot);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //파일이 존재 하지 않으면...
            if (!System.IO.File.Exists(strLocalPath + "\\Test.json")) return;

            //Json Read...
            string strReturnValue = System.IO.File.ReadAllText("Test.json");
            if (strReturnValue == "")
            {
                MessageBox.Show("불러오기 실패...");
                return;
            }
            //Json 으로 바꾸기...
            JsonTextParser jtr = new JsonTextParser();
            JsonObject jo = jtr.Parse(strReturnValue);

            JsonObjectCollection jac = (JsonObjectCollection)jo;
            JsonArrayCollection arr1 = jac["Server_Info"] as JsonArrayCollection;
            JsonArrayCollection arr2 = jac["Test_Info"] as JsonArrayCollection;

            textBox2.Text = "";

            foreach (JsonObjectCollection joc in arr1)
            {
                textBox2.Text += "Server_Info" + System.Environment.NewLine;
                textBox2.Text += "IP: " + joc["IP"].GetValue().ToString() + System.Environment.NewLine;
                textBox2.Text += "PW: " + joc["PW"].GetValue().ToString() + System.Environment.NewLine;
                textBox2.Text += "DataBase: " + joc["DataBase"].GetValue().ToString() + System.Environment.NewLine;
            }

            textBox2.Text += System.Environment.NewLine;

            foreach (JsonObjectCollection joc2 in arr2)
            {
                textBox2.Text += "Test_Info" + System.Environment.NewLine;
                textBox2.Text += "X: " + joc2["X"].GetValue().ToString() + System.Environment.NewLine;
                textBox2.Text += "Y: " + joc2["Y"].GetValue().ToString() + System.Environment.NewLine;
                textBox2.Text += "Z: " + joc2["Z"].GetValue().ToString() + System.Environment.NewLine;
            }

        }



    }
}

 

* 예제 결과

 

Write Button Click

 

Read Button Click

 

반응형
반응형

* C# 반올림 Math.Round() 예제...

 

//테스트 변수

double dbTmp = 12.5; 


//반올림 
int iRound = (int)Math.Round(dbTmp, MidpointRounding.AwayFromZero  );

//결과 : iRound = 13



//올림
int iCeiling = (int)Math.Ceiling(dbTmp);

//결과 : iCeiling = 13


//내림 

int iTruncate = (int)Math.Truncate(dbTmp);

//결과 : iTruncate = 12


//int 형으로 캐스팅 했을 시
int iTmp = (int)dbTmp;

//결과 : iTmp = 12



MessageBox.Show(iRound.ToString() + ", " + iCeiling.ToString() + ", " + iTruncate.ToString() + ", " + iTmp.ToString());

 

위 소스코드를 보면 Math.Round() 함수에 인자가 반드시 열거형 인자 MidpointRounding.AwayFromZero

전달 되는 걸 볼 수 있습니다. 만약 열거형 인자  MidpointRounding.AwayFromZero 없다면 소수점 0.5 가 반

올림이 되지 않는 걸 볼 수 있습니다. 

 

다음 표에서 일부 양수 및 음수 값과 함께에서 반올림의 결과 보여 줍니다. MidpointRounding합니다. 숫자를 반올림 하거나 내림 하는 데 자릿수가 소수점 반올림 연산에 영향을 줍니다 후 수는 0입니다. 예를 들어-2.5 수, 소수점 뒤의 숫자는 5입니다. 해당 숫자가 중간점 이기 때문에 사용할 수는 MidpointRounding 값을 반올림 한 결과 확인 합니다.  AwayFromZero 지정 된 경우-3은 전체 자릿수가 0 인 가장 가까운 숫자 이므로 반환 됩니다.  ToEven 지정 하면 전체 자릿수가 0 인 가장 가까운 짝수로는-2가 반환 됩니다.

 

원래 수                                          AwayFromZero                               ToEven

3.5 4 4
2.8 3 3
2.5 3 2
2.1 2 2
-2.1 -2 -2
-2.5 -3 -2
-2.8 -3 -3
-3.5 -4 -4

 

*참조 문서 https://docs.microsoft.com/ko-kr/dotnet/api/system.midpointrounding?view=netframework-4.8

 

반응형
반응형

* VB (Redim Preserve) 처럼 배열 사이즈 조절 하기 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_ArryayResize
{
    public partial class Form1 : Form
    {
        string[] strTmp = new string[2]; //배열 초기화 갯수 2개로...

        public Form1()
        {
            InitializeComponent();
            strTmp[0] = "Test 1";
            strTmp[1] = "Test 2";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //TextBox 값이 빈 값이면...
            if (txtNumber.Text == "")
            {
                MessageBox.Show("배열 수 값이 빈 텍스트 일 순 없습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }

            //TextBox 값이 숫자가 아닐 경우...
            if (IsInt(txtNumber.Text) == 0)
            {
                MessageBox.Show("숫자만 입력 해 주세요.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                txtNumber.Text = "";
                txtNumber.Focus();
                return;
            }

            //기본 배열 갯수 보다 이상 으로 숫자 입력 받음...
            if (Convert.ToInt32(txtNumber.Text) <= 3)
            {
                MessageBox.Show("3 이상 숫자를 입력 해 주세요.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                txtNumber.Text = "";
                txtNumber.Focus();
                return;
            }

            int iIndex = 2; //배열 인덱스 가르킬 변수...
           
            txtMsg.Text = "";
            txtMsg.Text += strTmp[0] + System.Environment.NewLine;
            txtMsg.Text += strTmp[1] + System.Environment.NewLine;

            for (int iCount = 3; iCount <= Convert.ToInt32(txtNumber.Text); iCount++)
            {
                //배열 갯수 증가...
                Array.Resize<string>(ref strTmp, iCount);

                strTmp[iIndex] = "Test " + iCount.ToString();
                txtMsg.Text += strTmp[iIndex] + System.Environment.NewLine;
                iIndex += 1;
            }

        
        }

        private int IsInt(object ob)
        {
            if (ob == null) return 0;

            int iCheck = 0;
            bool bCheck = int.TryParse(ob.ToString(), out iCheck);

            if (!bCheck)
            {
                return 0;
            }

            return iCheck;
        }
    }
}

* 예제 결과 화면

결과 화면에서 보듯이 예제를 따라 완성 해보면 배열 사이즈를 줄였다 늘렸다 할 수 있습니다.

 

https://kdsoft-zeros.tistory.com/76

 

[C#] string 을 int 및 double 형으로 변환 하기, null 체크

* string 문자열을 정수 및 실수 형으로 변환 하기 예제... 전체 소스코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;..

kdsoft-zeros.tistory.com

 

반응형
반응형

         

 

            //64 bit , 32 bit 구분 방법
            if (IntPtr.Size == 8)
            {
                MessageBox.Show("64");
            }
            else
            {
                MessageBox.Show("32");
            }

 

 

반응형
반응형

* C# 폴더 락 설정 및 해제  - 권한 설정 및 해제 예제...

 테스트 환경

 - 윈도우7 64 Bit

 - Visual Studio 2008 닷넷 프레임 워크 3.5

 

메인화면

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.Security.AccessControl;
using System.IO;

namespace CSharp_FolderLock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //Folder Lock Set
            //선택된 폴더가 존재 하지 않는다면....
            if (!Directory.Exists(label1.Text))
            {
                return;
            }

            try
            {
                string adminUserName = Environment.UserName;
                DirectorySecurity ds = Directory.GetAccessControl(label1.Text);
                FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny);
                ds.AddAccessRule(fsa);
                Directory.SetAccessControl(label1.Text, ds);
            }
            catch (Exception ex)
            {
                label2.Text = ex.Message.ToString();
            }

            label2.Text = "Folder Lock Success...";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Folder Lock Cancel
            //선택된 폴더가 존재 하지 않는다면....
            if (!Directory.Exists(label1.Text))
            {
                return;
            }


            try
            {
                string adminUserName = Environment.UserName;
                DirectorySecurity ds = Directory.GetAccessControl(label1.Text);
                FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny);
                ds.RemoveAccessRule(fsa);
                Directory.SetAccessControl(label1.Text, ds);
            }
            catch (Exception ex)
            {
                label2.Text = ex.Message.ToString();
            }
            label2.Text = "Folder Lock Cancel...";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Folder Select
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                label1.Text = fbd.SelectedPath ;
            }

        }
    }
}

 

* 결과 화면

 

위 그림과 같이 해당 폴더 권한을 설정 하고 접근 하면 권한이 없다고 나오고 해제 하고 접근 하게 되면 해당 폴더에

접근 할 수 있게 됩니다. 

반응형
반응형

* 기상청 날씨 (Weather) 정보 가져오기 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace CSharp_Weather
{
    public partial class Form1 : Form
    {
        string strURL = "http://www.kma.go.kr/weather/forecast/mid-term-xml.jsp";
        string strCity = "";
        public Form1()
        {
            InitializeComponent();

            cboCity.SelectedIndex = 10;
            lblToday.Text = DateTime.Now.ToString("yyyy-MM-dd");
        }

        private void cboCity_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (XmlReader xr = XmlReader.Create(strURL))
                {
                    string strMsg = "";
                    XmlWriterSettings ws = new XmlWriterSettings();
                    ws.Indent = true;
                    bool bCheck = false;
                    int iCount = 0;
                    strCity = cboCity.Text;

                    while (xr.Read())
                    {
                        switch (xr.NodeType)
                        {
                            case XmlNodeType.CDATA:
                                {
                                    txtMsg.Text = xr.Value.ToString().Replace("<br />", " ");
                                    break;
                                }
                            case XmlNodeType.Element:
                                {
                                    break;
                                }
                            case XmlNodeType.Text:
                                {
                                    if (xr.Value.Equals(strCity))
                                    {
                                        bCheck = true;
                                    }

                                    if (bCheck)
                                    {
                                        DateTime dt;
                                        bool b = DateTime.TryParse(xr.Value.ToString(), out dt);
                                        if (b)
                                        {
                                            strMsg += "/";
                                        }

                                        strMsg += xr.Value + ",";
                                        iCount += 1;
                                        if (iCount > 36)
                                        {
                                            bCheck = false;
                                        }
                                    }
                                    break;
                                }
                            case XmlNodeType.XmlDeclaration:
                                {
                                    break;
                                }
                            case XmlNodeType.ProcessingInstruction:
                                {
                                    break;
                                }
                            case XmlNodeType.Comment:
                                {
                                    break;
                                }
                            case XmlNodeType.EndElement:
                                {
                                    break;
                                }
                        }
                    }//while

                    //요일별로 짜르기
                    string[] strTmp = strMsg.Split('/');

                    //요일별 데이터
                    string[] strWh1 = strTmp[1].Split(',');
                    label3.Text = strWh1[0];
                    label5.Text = "최저: " + strWh1[2] + " ℃";
                    label6.Text = "최고: " + strWh1[3] + " ℃";
                    label7.Text = strWh1[1];

                    string[] strWh2 = strTmp[2].Split(',');
                    label11.Text = strWh2[0];
                    label10.Text = "최저: " + strWh2[2] + " ℃";
                    label9.Text = "최고: " + strWh2[3] + " ℃";
                    label8.Text = strWh2[1];

                    string[] strWh3 = strTmp[3].Split(',');
                    label15.Text = strWh3[0];
                    label14.Text = "최저: " + strWh3[2] + " ℃";
                    label13.Text = "최고: " + strWh3[3] + " ℃";
                    label12.Text = strWh3[1];

                    string[] strWh4 = strTmp[4].Split(',');
                    label27.Text = strWh4[0];
                    label26.Text = "최저: " + strWh4[2] + " ℃";
                    label25.Text = "최고: " + strWh4[3] + " ℃";
                    label24.Text = strWh4[1];

                    string[] strWh5 = strTmp[5].Split(',');
                    label23.Text = strWh5[0];
                    label22.Text = "최저: " + strWh5[2] + " ℃";
                    label21.Text = "최고: " + strWh5[3] + " ℃";
                    label20.Text = strWh5[1];

                    string[] strWh6 = strTmp[6].Split(',');
                    label19.Text = strWh6[0];
                    label18.Text = "최저: " + strWh6[2] + " ℃";
                    label17.Text = "최고: " + strWh6[3] + " ℃";
                    label16.Text = strWh6[1];
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
        }
    }
}

기상청 jsp 내용 

 

콤보 박스 내용은 아래의 그림과 같이 속성에서 바로 등록 해 주었으며, ComboBox Index 가 아닌

Text 즉 도시 이름으로 체크 하기에 아이템 순서는 상관이 없습니다.

 

 

*결과 화면

 

반응형
반응형

* DateTime Class 를 이용한 현재 선택된 달의 마지막 날짜 및 요일 구하기 예제...

 

메인화면

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_MonthLastDay
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            numYear.Value = DateTime.Now.Year;
            numMonth.Value = DateTime.Now.Month;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //날짜 타입으로 변환 하기...
            DateTime dtTmp = DateTime.Parse(numYear.Value.ToString() + "-" + numMonth.Value.ToString() + "-01");
            //현재 선택된 달 + 1 하기...
            DateTime dt = dtTmp.AddMonths(1);
            //+1 된 달에서 하루 빼기...
            dt = dt.AddDays(-1);

            label4.Text = "선택된 년월: " + numYear.Value.ToString() + "-" + numMonth.Value.ToString();
            label5.Text = "마지막 일: " + dt.ToString("dd");
            label6.Text = "마지막 요일: " + GetDayOfWeek(dt);
        }

        //요일 String 문자열로 리턴 함수...
        private string GetDayOfWeek(DateTime dt)
        {
            string strDay = "";

            switch (dt.DayOfWeek)
            {
                case DayOfWeek.Monday:
                    strDay = "월요일";
                    break;
                case DayOfWeek.Tuesday:
                    strDay = "화요일";
                    break;
                case DayOfWeek.Wednesday:
                    strDay = "수요일";
                    break;
                case DayOfWeek.Thursday:
                    strDay = "목요일";
                    break;
                case DayOfWeek.Friday:
                    strDay = "금요일";
                    break;
                case DayOfWeek.Saturday:
                    strDay = "토요일";
                    break;
                case DayOfWeek.Sunday:
                    strDay = "일요일";
                    break;
            }

            return strDay;
        }


    }
}

 

* 사용자 정의 함수 GetDayOfWeek => 요일 값을 문자열로 변환 하여 리턴 하는 함수

 

 

* 예제 결과

 

결과 화면

 

 

반응형
반응형

* string 문자열을 정수 및 실수 형으로 변환 하기 예제...

 

메인화면

전체 소스코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_getType
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //int 형 변환
            int iReturnValue = IsInt(textBox1.Text);

            if (iReturnValue == 0)
            {
                label1.Text = "int 형 변환으로 실패...";
                return;
            }

            label1.Text = "int 형 변환 성공...";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //double 형변환
            double dbReturnValue = IsDouble(textBox1.Text);

            if (dbReturnValue == 0)
            {
                label1.Text = "Double 형 변환으로 실패...";
                return;
            }

            label1.Text = "Double 형 변환 성공...";

        }

        private void button3_Click(object sender, EventArgs e)
        {
            //string 값 체크
            //string str = null;
            if (IsNullString(textBox1.Text))
            {
                label1.Text = "string 값이 Null 또는 빈 값입니다...";
                return;
            }

            label1.Text = "string 값이 정상적입니다...";
        }


        private int IsInt(object ob)
        {
            if (ob == null) return 0;

            int iCheck = 0;
            bool bCheck = int.TryParse(ob.ToString(), out iCheck);

            if (!bCheck)
            {
                return 0;
            }

            return iCheck;
        }

        private double IsDouble(object ob)
        {
            if (ob == null) return 0;

            double  dbCheck = 0;
            bool bCheck = double.TryParse(ob.ToString(), out dbCheck);

            if (!bCheck)
            {
                return 0;
            }

            return dbCheck;
        }

        private bool IsNullString(string str)
        {
            return string.IsNullOrEmpty(str);
        }

    }
}

위 그림과 같이 int.TryParse 사용으로 오류없이 자연스럽게 형 변환 하는 모습입니다.

물론 Convert.ToInt32 () 로 가능 하며, int.Parse 로도 가능 하지만 예기치 못한 string 값에

숫자가 아닌 다른 문자열이 들어 가게 된다면... try{} catch{} 문이 없다면 오류를 내면서 프로그램

이 비정상적으로 종료 되는 걸 볼 수 있습니다.

 

int 형으로 변환 실패 된 그림 예 입니다. 만약 int.Parse 와 Convert.ToInt32 로 변환 하였다면

아래의 그림과 같이 오류 메시지가 뜨게 됩니다.

 

Double 형 변환 또한 int 형 변환 설명 드렸듯이 같습니다. 

 

형변환 성공
형 변환 실패

마지막으로 string.IsNullOrEmpty() 함수로 string 문자열이 빈 값 인지 또는 null 값 인지 체크 하는 예 입니다.

 

반응형

+ Recent posts