DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイル名称変換(拡張子も)

分類:[.NET]

vb.net os:XP
現在はじめてVBの仕事をしています。
今までは制御系のモノに関わってきた為、現在苦労しております。

今回自分が今苦しんでいるのは、ファイル名の変換です。
<仕様>テキストファイルを1レコードずつ読み込む。
    そのレコードを使ってレコード件数分存在するファイルの名称を変換する。

<例> テキストファイル    画像ファイル    変換後名称
    1件目 aaaaaa     WRH0001.bmp  →  aaaaaa.gif
    2件目 bbbbbb     WRH0002.bmp  →  bbbbbb.gif
    3件目 cccccc     WRH0003.bmp  →  cccccc.gif

と、この様な仕様なのですが、可能なのでしょうか?
■No1259に返信(お初さんの記事)
> vb.net os:XP
> 現在はじめてVBの仕事をしています。
> 今までは制御系のモノに関わってきた為、現在苦労しております。
> 
> 今回自分が今苦しんでいるのは、ファイル名の変換です。
> <仕様>テキストファイルを1レコードずつ読み込む。
>     そのレコードを使ってレコード件数分存在するファイルの名称を変換する。
> 
> <例> テキストファイル    画像ファイル    変換後名称
>     1件目 aaaaaa     WRH0001.bmp  →  aaaaaa.gif
>     2件目 bbbbbb     WRH0002.bmp  →  bbbbbb.gif
>     3件目 cccccc     WRH0003.bmp  →  cccccc.gif
> 
> と、この様な仕様なのですが、可能なのでしょうか?
> 

fukuです、少し仕様と違うかもしれませんが以下の感じで
bmpからgifへの変換は行えますよ。

テキストファイルの内容(カンマ区切り文字列)
WRH0001.bmp,aaaaaa.gif
WRH0002.bmp,bbbbbb.gif
WRH0003.bmp,cccccc.gif

変換サンプル

    'pi_strFileNameは読み込むテキストファイルへのフルパス(c:\temp\変換定義.txt 等)
    'pi_strFolderNameは、名前を変えるファイルが存在するフォルダへのパス(c:\temp 等)
    Private Sub Sub_ConvertFileName(ByVal pi_strFileName As String, ByVal pi_strFolderName As String)
        Dim strParm As String
        Dim strParms() As String
        Dim strSourceFileName As String
        Dim strDestFileName As String

        Dim MyStreamReader As System.IO.StreamReader
        Dim myBitmap As Bitmap

        'テキストファイルを開く
        MyStreamReader = New System.IO.StreamReader(pi_strFileName, Encoding.Default)
        Do While MyStreamReader.Peek() >= 0
            '1行読み込み
            strParm = MyStreamReader.ReadLine()
            strParms = strParm.Split(",")
            '変換元のファイルへのフルパス
            strSourceFileName = pi_strFolderName & "\" & strParms(0)
            '変換先のファイルへのフルパス
            strDestFileName = pi_strFolderName & "\" & strParms(1)
            If File.Exists(strSourceFileName) = True Then
                If File.Exists(strDestFileName) = True Then
                    '変換先のファイルを削除
                    File.Delete(strDestFileName)
                End If
                '名前を変えるだけならこれでよし。
                'File.Move(strSourceFileName, strDestFileName)
                'これでもできるけど。。。
                'Microsoft.VisualBasic.Rename(strSourceFileName, strDestFileName)

                'でもBMPをGIFに変換しなくては。。。
                myBitmap = New Bitmap(strSourceFileName)
                myBitmap.Save(strDestFileName, ImageFormat.Gif)
                '変換元を消したければ
                'File.Delete(strDestFileName)
            End If

        Loop

    End Sub

以上です。
fukuです。
間違いました。
> '変換元を消したければ
> 'File.Delete(strDestFileName)
変換元を消したければ以下です。
'File.Delete(strSourceFileName)

ちなみに自分も制御系あがりで苦労は十二分に分かりますよ!
■No1264に返信(fukuさんの記事)
> fukuです。
> 間違いました。
>> '変換元を消したければ
>> 'File.Delete(strDestFileName)
> 変換元を消したければ以下です。
> 'File.Delete(strSourceFileName)
>
> ちなみに自分も制御系あがりで苦労は十二分に分かりますよ!
>

詳しく教えて頂いてありがとうございます。
ここで疑問なのですが、拡張子を変えても、ファイルサイズは変わらない事はわかっていたのですが、拡張子を変換した時にファイルサイズも変更になる様にする事は可能なのでしょうか?
>
> 詳しく教えて頂いてありがとうございます。
> ここで疑問なのですが、拡張子を変えても、ファイルサイズは変わらない事はわかっていたのですが、拡張子を変換した時にファイルサイズも変更になる様にする事は可能なのでしょうか?

もしBMPファイルの拡張子をGIFへ変えただけではサイズは変わりません。
それは、ファイルの中身をバイナリーデータとしてみた時に内容が変わって
いないからです。
myBitmap.Save(strDestFileName, ImageFormat.Gif)
を実行した段階でBMPファイルがGIFへ変換(256色へ変更)しますので
バイナリデータ自体が圧縮というか簡単に言うと減食されたデータ分が
取り除かれてファイルサイズが小さくなります。
(Win付属のペイントでBMPをGIFにするのと同じです)

これでどうでしょうか?
>
> もしBMPファイルの拡張子をGIFへ変えただけではサイズは変わりません。
> それは、ファイルの中身をバイナリーデータとしてみた時に内容が変わって
> いないからです。
> myBitmap.Save(strDestFileName, ImageFormat.Gif)
> を実行した段階でBMPファイルがGIFへ変換(256色へ変更)しますので
> バイナリデータ自体が圧縮というか簡単に言うと減食されたデータ分が
> 取り除かれてファイルサイズが小さくなります。
> (Win付属のペイントでBMPをGIFにするのと同じです)
>
> これでどうでしょうか?
>
>
またのお返事ありがとうございます。
教えていただいたとおりサイズを減らす事ができました。

ありがとうございます。
解決チェック漏れでした。。。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板