네트워크 (인트라넷) 등에 파일을 전송하는 프로그램을 만들어서 스케쥴러로 관리하고자 하는 목적으로 작성하였습니다.

 

 

 

 

1. TaskManager 에 등록해서 일정시간을 주기로 정기적으로 구동하는 프로그램을 작성 (가칭 A)

2. 네트워크에 파일을 전송하는 프로그램을 작성 (가칭 B, NetWork / FTP)

 

오늘은 2의 상세버젼 (네트워크 파일복사 / 폴더작성) 을 위한 프로그램에 대해서 설명합니다.

 

파일전송 방식은 여러방법이 있습니다만, 여기서는 네트워크 전송에 대해서 서술합니다.

다음번 포스팅에서는 FTP 전송에 대해서 서술하겠습니다.

 

A. 폴더존재여부를 확인해서 존재하지않는경우 폴더를 작성한다. (권한필요)

※folderPath = 확인할 폴더의 FullPath

      If Not System.IO.Directory.Exists(folderPath) Then
           System.IO.Directory.CreateDirectory(folderPath)
      End If

 

B. System.IO.File.Copy 를 이용해서 대상파일을 복사한다. 

      System.IO.File.Copy(복사할대상파일, 복사하고싶은곳, True)

 

위에서 세번째 파라메터로 True 를 설정하면, 복사하고싶은곳에 해당 파일이 존재할경우 덮어쓰기를 합니다.

주의) 복사하고싶은곳 은 파일명까지 FullPath 를 입력하여야 합니다.

 

간략하게 네트워크상 파일을 복사하는 방법에 대해서 알아보았습니다.

여기서 참고로 복사할대상파일의 파일이름만 가져오는 방법은 IO.Path.GetFileName 메소드를 이용하는것 입니다.

      IO.Path.GetFileName(복사할대상파일)

 

위와같이 설정하면, FullPath 에서 파일이름만 취득해서 반환해줍니다.

Framework 4.0 부터 exe 파일간에 메모리 매핑 (MemoryMappedFile) 메소드를 사용해서

필요한 데이터를 공유할수 있다.

 

 

상속상위 계층

System.Object
  System.IO.MemoryMappedFiles.MemoryMappedFile

 

 

MemoryMappedFile 메소드를 이용하여 데이터를 쉽게 공유할수 있다.

물론 타겟이 되는 폼의 New 메소드에 파라메터로 전달하는 방법도 있지만,

MemoryMappedFile 의 경우는 타 exe 파일들간에 데이터 공유도 손쉽게 할수있다는 장점이 있다.

 

사용법은 아래와 같다.

 

<메모리에 쓰는방법>

     ''' <summary>
    ''' 메모리에 쓰는방법
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub MakeMemoryMappedFile(ByVal tar As String, ByVal tarText As String)
        'Dim File = MemoryMappedFile.CreateOrOpen(target, MaxSize)
        Dim File = MemoryMappedFile.CreateOrOpen(target, MaxSize)
       
        Dim bytes = New Byte() {}
        bytes = StrToByteArray(tarText)

        Using writer = File.CreateViewAccessor(0, bytes.Length)

            writer.WriteArray(Of Byte)(0, bytes, 0, bytes.Length)

        End Using

 

    End Sub

 

 

 

<메모리로부터 읽는방법>

 
    ''' <summary>
    ''' 메모리로부터 읽는방법
    ''' </summary>
    ''' <remarks></remarks>
    Private Function ReadMemoryMappedFile(ByVal tarMem As String) As String
        Dim result As String = ""

        Try
            Using file = MemoryMappedFile.OpenExisting(tarMem)
                Using reader = file.CreateViewAccessor(0, MaxSize)

                    Dim bytes = New Byte(MaxSize) {}
                    reader.ReadArray(Of Byte)(0, bytes, 0, bytes.Length)

                    result = System.Text.Encoding.UTF8.GetString(bytes)

                End Using
            End Using

            Return result

            'Catch noFile As FileNotFoundException
            '    MsgBox("Error : " + noFile.Message)
            '    Return result

        Catch Ex As Exception
            Return result
        End Try

    End Function

 

 

<실제 사용예제> 

 

 MakeMemoryMappedFile(키값, 넣을내용)
 

 ReadMemoryMappedFile(키값)

 

 

 

필자는 위의 방법으로 현재 개발중인 exe 모듈 140여개인 SmartClient 솔류션 간의 공통데이터 공유에 적용중이다.

 

물론, 데이터를 암호화해서 암호화된 값을 넣어두고

끌어다쓰는 모듈쪽에서 복호화해서 받아쓰는 방법이 보안상은 좀 더 나을것이다.

+ Recent posts