반응형

* VBNET 프로그램 중복 실행 방지 예제

 

1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택

    VBNET Windows Forms 응용 프로그램 열어 줍니다. =>

    Visual Studio 2019 는 Windows Forms 응용 프로그램(NET.Framework) 를 선택 (NET.Core) X

 

오른쪽 상단 솔루션 탐색기 -> My Project 클릭 -> 중앙 화면에 으용 프로그램 이벤트 보기를 클릭을 합니다.

 

그럼 아래의 그럼과 같이 솔루션 탐색기에 ApplicationEvents.vb 파일이 생기게 됩니다.

 

ApplicationEvents.vb

 

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  '프로그램 중복 실행 방지...
  If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
            MessageBox.Show("프로그램이 이미 실행 중입니다...종료 후 다시 실행해 주세요.", _
            "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
       End
  End If
End Sub

또는 Form1.vb 안에서도 구현 가능 합니다.

 

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '프로그램 중복 실행 방지...
        If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
            MessageBox.Show("프로그램이 이미 실행 중입니다...종료 후 다시 실행해 주세요.", _
                            "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            End
            'Application.Exit()
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("프로그램 중복 실행 테스트...", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    End Sub

    
End Class

 

C# 처럼 Application.Exit() 를 써서 응용프로그램을 종료 시켜도 되지만 VB6 처럼 간단한  End 로도 프로그램

을 종료 하실 수 있습니다.

 

* 예제 결과

 

결과 화면

 

[C#] 프로그램 중복 실행 방지

 

[C#] 프로그램 중복 실행 방지

* 프로그램 중복 실행 방지 예제 1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택 C# Windows Forms 응용 프로그램 열어 줍니다. 2. 아래의 그림과 같이 오른쪽 솔루션 탐색기에서 Pro..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET Delay 함수 예제...

 

메인화면

Form1.vb

 

 

Public Class Form1
    '지연 시간 젤 변수...
    Dim dtDelayStart As DateTime

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        '지연
        dtDelayStart = DateTime.Now

        '지연 함수 사용
        '5초간 지연
        'Call DelaySystem(5000) <- VB6 처럼 함수 Call 키워드를 써서도 가능
        DelaySystem(5000)

        '지연 시간 구하기
        Dim ts As TimeSpan = DateTime.Now - dtDelayStart
        lblTime.Text = ts.Seconds.ToString()

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        '지연 중 버튼 클릭 할 
        lbl.Text = "지연 시간 중 버튼 Click..."
    End Sub

    Private Sub DelaySystem(ByVal ms As Integer)
        'DelaySystem
        '1000ms = 1초
        '전달인자 : 얼마나 지연 시킬 것인가에 대한 변수
        Dim dtAfter As DateTime = DateTime.Now
        Dim dtDuration As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        Dim dtThis As DateTime = dtAfter.Add(dtDuration)

        While (dtThis >= dtAfter)
            'DoEvents() 를 사용 해서 지연 시간 동안
            '버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
            '없으면 지연 동안 다른 이벤트를 받지 못함...
            '
            System.Windows.Forms.Application.DoEvents()
            '현재 시간 얻어 오기...
            'VBNET 은 VB6 처럼 Date.Now 로 해도 됨.
            dtAfter = DateTime.Now

        End While

        'VB6 처럼 아래의 소스 처럼 Date 클래스 사용으로도 표현 가능
        'Dim dtAf As Date = Date.Now
        'Dim dtDrua As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        'Dim dtTh As Date = dtAf.Add(dtDuration)

        'While (dtTh >= dtTh)
        'System.Windows.Forms.Application.DoEvents()
        'dtAf = Date.Now
        'End While

    End Sub

End Class

 

위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.

DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.

 

주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는

타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때

그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는

결과와 같습니다.

 

하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.

 

* 예제 결과

 

진행 중 화면

 

말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을

클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.

 

결과 화면

반응형
반응형

* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제

 

메인 화면

File Open 버튼 : 파일 대화 상자가 뜨게 되며, 해당 파일 선택 시 위 그림과 같이 파일의 위치 와 사이즈가

                      표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                      위한 작업을 필요 하다면 해줄 필요가 있습니다.

                      Ex) 위 그림에서 파일 사이즈를 변환 해 본다면...

                      1024 로 한번 나누게 되면 KB -> 10722 KB

                      KB 용량을 다시 1024 로 나누게 되면 10.4 MB 가 되겠습니다.

 

파일 대화 상자

 

Folder Open 버튼 : 폴더 대화 상자가 뜨게 되며, 해당 폴더 선택 시 메인화면을 보듯이 폴더의 위치 와 사이즈가

                          표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                          위한 작업을 필요 하다면 해줄 필요가 있습니다.

                          File Open에서 설명 햇듯이 1024 한번 나누면 KB 두번 나누면 MB 로 변환 됨.

 

폴더 대화 상자

Form1.vb

 

Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lvMain.Items.Clear()

        '드라이브 구하기
        Dim dList() As DriveInfo = DriveInfo.GetDrives()

        For iCount As Integer = 0 To dList.Length - 1
            Try
                Dim lvi As ListViewItem = New ListViewItem()
                lvi.Text = dList(iCount).Name.ToString() + " 드라이브"
                lvi.SubItems.Add(dList(iCount).TotalSize.ToString())
                lvi.SubItems.Add(dList(iCount).TotalFreeSpace.ToString())

                lvMain.Items.Add(lvi)
            Catch ex As Exception

            End Try
        Next

    End Sub

    Private Function FileSize(ByVal strPath As String) As Long
        '파일 경로가 없다면
        If (strPath = "") Then Return 0

        Dim fi As FileInfo = New FileInfo(strPath)
        If (fi Is Nothing) Then Return 0

        Return fi.Length
    End Function

    Private Function FolderSize(ByVal d As DirectoryInfo) As Long

        Dim lSize As Long = 0

        '파일 사이즈
        Dim fsize() As FileInfo = d.GetFiles()

        For iCount As Integer = 0 To fsize.Count() - 1
            lSize += fsize(iCount).Length
        Next


        '하위 디렉토리 사이즈
        Dim dSize() As DirectoryInfo = d.GetDirectories()
        For iCount As Integer = 0 To dSize.Count() - 1
            lSize += FolderSize(dSize(iCount))
        Next

        Return lSize

    End Function


    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'File Open
        Dim ofd As OpenFileDialog = New OpenFileDialog()

        '파일 열기
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            lblFilePath.Text = ofd.FileName
            lblSize.Text = FileSize(ofd.FileName).ToString()
            '
            '위 소스를 풀면
            'Dim l as Long = FileSize(ofd.FileName)
            'lblSize.Text = l.ToString()   으로 됨.
        End If

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Folder Open
        Dim fbd As FolderBrowserDialog = New FolderBrowserDialog()

        If fbd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            lblFolderPath.Text = fbd.SelectedPath
            lblFolderSize.Text = FolderSize(New DirectoryInfo(fbd.SelectedPath)).ToString()
            '
            '위 소스를 풀면
            'Dim d as DirectoryInfo = new DirectoryInfo(fbd.SelectedPath)
            'Dim l as Long = FolderSize(d)
            'lblFolderSize.Text = l.ToString() 으로 됨.
            '
        End If


    End Sub
End Class

 

* 위 소스에 보면 FolderSize => 마지막 구문은 재귀호출하여 하위 디렉토리가 있으면 들어가서

파일 사이즈 를 리턴 하게 됩니다.

 

함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라고 합니다.

이러한 형태의 구문을 가지고 있는 함수를 재귀 함수라고 불리기도 합니다.

[C#] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기

 

[C#] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기

* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제 File Open 버튼 : 파일 대화 상자가 뜨게 되며, 해당 파일 선택 시 위 그림과 같이 파일의 위치 와 사이즈가 표시 됩니다. 다만 사이즈 표시는 기본 Byte..

kdsoft-zeros.tistory.com

 

반응형
반응형

* 윈도우 레지스트리를 이용 하여 윈도우 시작 시 프로그램 자동 실행을 만들어 보겠습니다.

 

메인화면

메인화면

윈도우 시작 버튼을 클릭 하면 아래의 이미지와 같이 레지스트리에 등록 된 것을 확인 할 수 있습니다.

-> 시작 -> 실행 -> regedit 를 입력 하여 레지스트리 에디터에 접근 할 수 있음.

 

윈도우 삭제 버튼은 등록된 레지스트리를 삭제 하는 기능.

 

 

Form1.vb

 

Imports Microsoft.Win32

Public Class Form1

    Dim strAppName As String = "TestWindowsStart"

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        '레지스트리에 등록...
        Using rk As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
            Try
                '레지스트리에 등록 되어 있는게 없으면...
                If rk.GetValue(strAppName) Is Nothing Then

                    '등록될 이름과 파일 위치 등록...
                    rk.SetValue(strAppName, Application.ExecutablePath.ToString())

                End If

                '오픈된 레지스트리 닫기...
                rk.Close()

            Catch ex As Exception

                MessageBox.Show("오류: " + ex.Message.ToString())

            End Try

            txtMsg.Text += strAppName + " 프로그램을 레지스트리에 등록 하였습니다." + System.Environment.NewLine

        End Using


    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        '레지스트리에서 삭제...
        Using rk As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
            Try
                '레지스트리에 등록 되어 있는게 있으면...
                If Not rk.GetValue(strAppName) Is Nothing Then

                    '레지스트리에 등록된 이름이 있으면 삭제...
                    rk.DeleteValue(strAppName, False)

                End If

                '오픈된 레지스트리 닫기...
                rk.Close()

            Catch ex As Exception

                MessageBox.Show("오류: " + ex.Message.ToString())

            End Try

            txtMsg.Text += strAppName + " 프로그램을 레지스트리에 삭제 하였습니다." + System.Environment.NewLine

        End Using
    End Sub
End Class

* 예제 결과 화면

 

결과 화면

 

[VBNET] 레지스트리(Registry) Create & Delete & Read & Write

 

[VBNET] 레지스트리(Registry) Create & Delete & Read & Write

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제 Form1.vb Imports Microsoft.Win32 Public Class Form1 Dim strAppName As String = "RegistryTest" Private Sub Form1_Load(ByVal sender As System.Object..

kdsoft-zeros.tistory.com

[C#] 레지스트리(Registry) Create , Read, Write, Delete

 

[C#] 레지스트리(Registry) Create , Read, Write, Delete

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;..

kdsoft-zeros.tistory.com

[C#] 레지스트리를 이용 윈도우 시작 시 프로그램 자동 실행

 

[C#] 레지스트리를 이용 윈도우 시작 시 프로그램 자동 실행

* 윈도우 레지스트리를 이용 하여 윈도우 시작 시 프로그램 자동 실행을 만들어 보겠습니다. 윈도우 시작 버튼을 클릭 하면 아래의 이미지와 같이 레지스트리에 등록 된 것을 확인 할 수 있습니다. -> 시작 -> 실..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET 엑셀 파일 예제...

 - 참조 추가

 

참조 추가 화면

 

메인 화면

 

소스 구현을 하기에 앞서 미리 엑셀 파일을 열어 D:\통합 문서.xls 로 샘플로 하나 저장 해 놓았습니다.

샘플로 파일 하나 만들고 위치는 어디에 있던 상관 없습니다.

 

Form1.vb

 

Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop
Imports System.IO

Public Class Form1

    '엑셀 사용을 위한 변수...
    Dim ExcelApp As Excel.Application = Nothing
    Dim wb As Excel.Workbook = Nothing
    Dim ws As Excel.Worksheet = Nothing

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'Excel Write

        '원본 파일이 없다면...
        If Not File.Exists("D:\통합 문서.xls") Then
            Return
        End If

        '파일이 있다면 삭제하고...
        If File.Exists("C:\Test.xls") Then
            File.Delete("C:\Test.xls")
        End If

        Try
            ExcelApp = New Excel.Application()
            'wb = ExcelApp.Workbooks.Add("Test") => 엑셀 파일 만들 때 새로운 워크북 추가 
            '엑셀 파일 오픈...
            wb = ExcelApp.Workbooks.Open("D:\통합 문서.xls")
            ws = CType(wb.Worksheets("Sheet1"), Excel.Worksheet)

            '시트 -> 셀에 데이터 삽입 부분
            ws.Cells(1, 1) = "1"
            ws.Cells(1, 2) = "12"
            ws.Cells(1, 3) = "123"
            ws.Cells(1, 4) = "1234"

            '폼 화면에 디스플레이...
            textBox1.Text += "A1: 1" + System.Environment.NewLine
            textBox1.Text += "A2: 12" + System.Environment.NewLine
            textBox1.Text += "A3: 123" + System.Environment.NewLine
            textBox1.Text += "A4: 1234" + System.Environment.NewLine
            textBox1.Text += "===========================" + System.Environment.NewLine
            textBox1.Text += "Excel File Write..." + System.Environment.NewLine
            textBox1.Text += "===========================" + System.Environment.NewLine


            '파일 닫기... 
            '다른이름으로 저장하기...
            wb.SaveAs("C:\Test.xls")
            wb.Saved = True
            wb.Close(False, Excel.XlFileFormat.xlWorkbookNormal)
            ExcelApp.Quit()

        Catch ex As Exception
            '객체 메모리 해제...
            ReleaseObject(ws)
            ReleaseObject(wb)
            ReleaseObject(ExcelApp)
            GC.Collect()
        Finally
            '객체 메모리 해제...
            ReleaseObject(ws)
            ReleaseObject(wb)
            ReleaseObject(ExcelApp)
            GC.Collect()
        End Try

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Excel Read

        '파일이 존재 하지 않는다면...
        If Not File.Exists("C:\Test.xls") Then
            Return
        End If

        Try
            ExcelApp = New Excel.Application()
            '엑셀 파일 오픈...
            wb = ExcelApp.Workbooks.Open("C:\Test.xls")
            ws = CType(wb.Worksheets("Sheet1"), Excel.Worksheet)

            '시트 -> 셀 값 얻어 오기...
            Dim rg As Excel.Range = CType(ws.Cells(1, 1), Excel.Range)
            Dim rg2 As Excel.Range = CType(ws.Cells(1, 2), Excel.Range)
            Dim rg3 As Excel.Range = CType(ws.Cells(1, 3), Excel.Range)
            Dim rg4 As Excel.Range = CType(ws.Cells(1, 4), Excel.Range)


            textBox1.Text += "A1: " + rg.Value2.ToString() + System.Environment.NewLine
            textBox1.Text += "A2: " + rg2.Value2.ToString() + System.Environment.NewLine
            textBox1.Text += "A3: " + rg3.Value2.ToString() + System.Environment.NewLine
            textBox1.Text += "A4: " + rg4.Value2.ToString() + System.Environment.NewLine
            textBox1.Text += "===========================" + System.Environment.NewLine
            textBox1.Text += "Excel File Read..." + System.Environment.NewLine
            textBox1.Text += "===========================" + System.Environment.NewLine

            '파일 닫기... 
            wb.Close(False, Excel.XlFileFormat.xlWorkbookNormal)
            ExcelApp.Quit()

        Catch ex As Exception
            '객체 메모리 해제...
            ReleaseObject(ws)
            ReleaseObject(wb)
            ReleaseObject(ExcelApp)
            GC.Collect()
        Finally
            '객체 메모리 해제...
            ReleaseObject(ws)
            ReleaseObject(wb)
            ReleaseObject(ExcelApp)
            GC.Collect()
        End Try


    End Sub

    Private Sub ReleaseObject(ByVal obj As Object)

        Try
            If Not obj Is Nothing Then
                Runtime.InteropServices.Marshal.ReleaseComObject(obj)
                obj = Nothing
            End If
        Catch
            obj = Nothing
        Finally
            GC.Collect()
        End Try

    End Sub


End Class

 

* 예제 결과 화면

 

결과 화면

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

 

[VBNET] Excel File Print (엑셀 파일 프린트)

* VBNET Excel File Print (엑셀 파일 프린트) 예제... - 인쇄할 엑셀 파일 추가 하기... (Excel File 추가하는 것은 C# 과 VBNET 이 다를게 없으므로 기존 C# 에 작성된 그림을 가져옴) 프로젝트 클릭 -> 마우..

kdsoft-zeros.tistory.com

[C#] Excel File Write & Read 예제...

 

[C#] Excel File Write & Read 예제...

* 엑셀 파일 쓰고 읽기 예제... 위 그림과 같이 프로젝트에 참조를 추가 해 줍니다. 참조가 추가 되었으면 이제 메인화면을 만들어 봅니다. 소스 구현을 하기에 앞서 미리 엑셀 파일을 열어 D:\통합 문서.xls..

kdsoft-zeros.tistory.com

 

[VBNET] File Create Delete Read Write Ex

 

[VBNET] File Create Delete Read Write Ex

* VBNET 파일 예제 Form1.vb Public Class Form1 Dim strCheckFolder As String = "" Dim strFileName As String = "Test.txt" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventA..

kdsoft-zeros.tistory.com

 

 

반응형
반응형

* VBNET 파일 예제

 

메인 화면

Form1.vb

 


Public Class Form1
    Dim strCheckFolder As String = ""
    Dim strFileName As String = "Test.txt"

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\"))
        strCheckFolder += "\TEST"

        'TEST 폴더가 없다면 생성...
        If Not System.IO.Directory.Exists(strCheckFolder) Then
            System.IO.Directory.CreateDirectory(strCheckFolder)
        End If

    End Sub

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'Create
        Try

            'System.IO 또는 System.Text 를 저 위에 Imports System.IO 나 Imports System.Text 로 선언 해두고 
            'StreamWriter , Encoding 클래스를 이용 해 줘도 됨.
            '파일이 없다면...
            If Not System.IO.File.Exists(strCheckFolder + "\" + strFileName) Then
                Using sw As System.IO.StreamWriter = New System.IO.StreamWriter(strCheckFolder + "\" + _
                                                                                strFileName, _
                                                                                True, _
                                                                                System.Text.Encoding.GetEncoding(949))


                    sw.Write(System.Environment.NewLine)
                    sw.Flush()
                    sw.Close()
                End Using
            End If

            Dim fi As System.IO.FileInfo = New System.IO.FileInfo(strCheckFolder + "\" + strFileName)
            lblCreate.Text = "*Message: " + fi.Name + " 파일을 만들었습니다."

        Catch ex As Exception
            System.Console.WriteLine(ex.Message.ToString())
        End Try

    End Sub

    Private Sub button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button4.Click
        'Delete

        '파일이 있다면...
        If System.IO.File.Exists(strCheckFolder + "\" + strFileName) Then

            System.IO.File.Delete(strCheckFolder + "\" + strFileName)

            Dim fi As System.IO.FileInfo = New System.IO.FileInfo(strCheckFolder + "\" + strFileName)
            lblDelete.Text = "*Message: " + fi.Name + " 파일을 삭제 했습니다."
        Else
            lblDelete.Text = "해당 파일이 없습니다."
        End If

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Read
        Dim strFileName As String = "TEST.ZerosKD"

        '파일이 없다면...
        If Not System.IO.File.Exists(strCheckFolder + "\" + strFileName) Then
            lblRead.Text = "해당 파일이 없습니다. File Read Fail."
            Return
        End If

        Dim strValue() As String = System.IO.File.ReadAllLines(strCheckFolder + "\" + strFileName)

        For iIndex As Integer = 0 To strValue.Length - 1
            'vbCrLf == System.Environment.NewLine 과 같은 기능을 함.
            txtRead.Text += strValue(iIndex) + vbCrLf
        Next

        txtRead.Text += "File Read TEST" + System.Environment.NewLine

        Dim fi As System.IO.FileInfo = New System.IO.FileInfo(strCheckFolder + "\" + strFileName)
        lblRead.Text = "*Message: " + fi.Name + " File Read Complete."

    End Sub

    Private Sub button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button3.Click
        'Write
        Dim strFileName As String = "TEST.ZerosKD"

        Try
            'True : Append 기존 파일이 있을 경우 추가해서 쓴다. False : 기존 파일이 있을 경우 덮어쓴다.
            Using sw As System.IO.StreamWriter = New System.IO.StreamWriter(strCheckFolder + "\" + strFileName, True)
                sw.Write(Date.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "File 예제..." + System.Environment.NewLine)
                sw.Write(Date.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + txtWrite.Text + System.Environment.NewLine)
                sw.Write(Date.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "============" + System.Environment.NewLine)
                sw.Write(Date.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "File Write TEST" + System.Environment.NewLine)
                sw.Flush()
                sw.Close()
            End Using

            Dim fi As System.IO.FileInfo = New System.IO.FileInfo(strCheckFolder + "\" + strFileName)
            lblWriteFile.Text = "*Message: " + fi.Name + " File Write Complete."

        Catch ex As Exception
            System.Console.WriteLine(ex.Message.ToString())
        End Try
        


    End Sub


End Class

 

위 소스에서 보시는 거와 같이 파일 저장 시 확장자 명은 사용자가 정의 해서 사용 할 수 있습니다.

또한 VbCrLf == System.Environment.NewLine 과 같은 기능을 함.

 

파일 결과 화면

 

[C#] File Create & Delete & Read & Write 예제

 

[C#] File Create & Delete & Read & Write 예제

* C# 파일 예제 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.Wind..

kdsoft-zeros.tistory.com

 

 

 

반응형
반응형

* INI 파일 예제

 

메인화면

Form1.vb

 

Imports System.Runtime.InteropServices
Imports System.IO
Imports System.Text

Public Class Form1
    
    '빌드되는 폴더 경로 가져오기...
    Dim strCheckFolder As String = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\"))

#Region "INI File...API 선언 및 함수 선언"
    <DllImport("kernel32.dll", SetLastError:=True)> _
    Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, _
                                ByVal lpKeyName As String, _
                                ByVal lpDefault As String, _
                                ByVal lpReturnedString As StringBuilder, _
                                ByVal nSize As Integer, _
                                ByVal lpFileName As String) As Integer
    End Function

    <DllImport("kernel32.dll", SetLastError:=True)> _
    Private Shared Function WritePrivateProfileString(ByVal lpAppName As String, _
                            ByVal lpKeyName As String, _
                            ByVal lpString As String, _
                            ByVal lpFileName As String) As Boolean
    End Function

    Private Function SetINI(ByVal strAppName As String, _
                           ByVal strKey As String, _
                           ByVal strValue As String, _
                           ByVal strFilePath As String) As Boolean
        SetINI = WritePrivateProfileString(strAppName, strKey, strValue, strFilePath)
    End Function
    Private Function GetINI(ByVal strAppName As String, _
                           ByVal strKey As String, _
                           ByVal strValue As String, _
                           ByVal strFilePath As String) As String
        Dim strbTmp As StringBuilder = New StringBuilder(255)

        GetPrivateProfileString(strAppName, strKey, strValue, strbTmp, strbTmp.Capacity, strFilePath)

        GetINI = strbTmp.ToString()

    End Function

    Private Function Create_INIFile(ByVal strPath As String, _
                                   ByVal strFileName As String) As Boolean
        If Dir(strPath & "\" & strFileName) <> "" Then
            Exit Function
        End If

        Try
            Using sw As StreamWriter = New StreamWriter(strPath & "\" & strFileName, False)
                sw.WriteLine(vbCrLf)
                sw.Flush()
                sw.Close()
            End Using
        Catch ex As Exception

            Return False
        End Try

        Return True
    End Function

#End Region


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'INIFile Create
        If Create_INIFile(strCheckFolder, "Test.ini") Then
            Label1.Text = "INIFile Create Complete."
            Label2.Text = "FileName: Test.ini"
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'INIFile Read
        Label4.Text = "INIFile Read Complete."
        Label3.Text = "Value: " + GetINI("Test_Info", "Test", "", strCheckFolder + "\Test.ini")
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'INIFile Write
        If SetINI("Test_Info", "Test", "1231231231", strCheckFolder + "\Test.ini") Then
            Label6.Text = "INIFile Write Complete."
            Label5.Text = "Value: 1231231231"
        End If

    End Sub

End Class

위 예제는 윈도우 API 함수를 이용해 INI 파일을 읽고 쓰기를 해 보았습니다. INI 파일 삭제는

'파일이 있으면...

If File.Exits("파일위치") then

      '파일 삭제 

      File.Delete("파일위치")

End If

이 코드만 있으면 파일이 삭제 가능 합니다.

 

* 예제 결과

 

예제 결과 화면

 

반응형
반응형

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제

 

메인 화면

 

Form1.vb

 

Imports Microsoft.Win32

Public Class Form1

    Dim strAppName As String = "RegistryTest"

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '쓰기
        WriteRegistry(strAppName, "Test1", "iii", "asdfasdf000")
        WriteRegistry(strAppName, "Test2", "iii", "asdfasdf111")
        WriteRegistry(strAppName, "Test3", "iii", "asdfasdf222")
        WriteRegistry(strAppName, "Test4", "iii", "asdfasdf333")

        '읽기
        'MessageBox.Show(ReadRegistry(strAppName,"Test1","iii"))

        '삭제
        'DeleteReg(strAppName)

        '등록된 목록 읽기
        Dim rk As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\" + strAppName)
        Dim str() As String = rk.GetSubKeyNames()

        For iCount As Integer = 0 To str.Length - 1
            ListBox1.Items.Add(str(iCount))
        Next

    End Sub

    '레지스트리도 폴더 개념으로 접근...
#Region " RegisTry Create & Read & Write & Delete..."

    Private Function DeleteReg(ByVal strSubKey As String) As Boolean
        Dim rk As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\", True)
        Try
            '하위 폴더(레지스트리)가 있으면 삭제 안됨.
            'if(Not rk Is Nothing) Then rkDeleteSubKey(strSubKey)

            '하위 폴더(레지스트리) 가 있던 없던 걍 삭제...
            If Not rk Is Nothing Then
                rk.DeleteSubKeyTree(strSubKey)
            End If
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

    '레지스트리 쓰기
    Private Function WriteRegistry(ByVal strAppName As String, ByVal strSubKey As String, ByVal strKey As String, ByVal strValue As String) As Boolean

        Dim rkReg As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\" + strAppName, True)
        'null 이면 폴더(레지스트리)가 없으므로 만듬...
        If rkReg Is Nothing Then
            rkReg = Registry.CurrentUser.CreateSubKey("SOFTWARE\" + strAppName)
        End If

        'OpenSubKey (하위폴더(레지스트리 이름) , 쓰기 선택 True 쓰기 False 및 인자가 없다면 읽기)
        Dim rkSub As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\" + strAppName + "\\" + strSubKey, True)
        If rkSub Is Nothing Then
            rkSub = Registry.CurrentUser.CreateSubKey("SOFTWARE\" + strAppName + "\\" + strSubKey)
        End If

        Try
            rkSub.SetValue(strKey, strValue)
        Catch ex As Exception
            Console.WriteLine(ex.Message.ToString())
            Return False
        End Try
        Return True
    End Function
    '레지스트리 읽기
    Private Function ReadRegistry(ByVal strAppName As String, ByVal strSubKey As String, ByVal strKey As String) As String
        Dim reg As RegistryKey

        Try
            reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\" + strAppName).OpenSubKey(strSubKey)
        Catch ex As Exception
            Return ""
        End Try

        Return reg.GetValue(strKey, "").ToString()
    End Function

#End Region

    
End Class

 

 

아래의 그림을 보면

HKEY_CUREENT_USER 가 트리뷰에서 보이게 됩니다.

 Registry.CurrentUser 는 저 레지스트리 폴더를 가르키게 되며

Registry.LocalMachine는 그 아래에 있는 HKEY_LOCAL_MACHINE 으로 들어가게 됩니다.

 

위 소스 Registry.CurrentUer.OpenSubKey("SOFTWARE") 는

레지스트리에 HKEY_CURRENT_USER => Software 폴더를 열겠다는 뜻

 

*레지스트리 편집기 (시작 -> 실행 -> regedit)

  

레지스트리 편집기 실행 

 

레지스트리 프로그램 실행 후 편집기 실행

Imports Microsoft.Win32

레지스트리 클래스를 사용하기 위해선 Microsoft.Win32 를 임포트 시켜 줘야 함.

반응형

+ Recent posts