none
MacでAdobeイラストレータを使用した作成したEPSファイルのリソースフォークを失わずにWindows環境でFTP転送する方法 RRS feed

  • 質問

  • 開発環境

    Visual Studio 2008 言語 VB.NET

    Framework 2.0

    OS:WindowsXP SP3

     

    質問内容

    画像を管理するプログラムを作成中なのですが、サーバにMacのイラストレータで作成したEPSファイルをWindows端末にコピーし開発したプログラムを使用してWindowsサーバにFTP転送するとリソースフォークがなくなった状態のEPSファイルになってしまいます。EPSファイルとしては、それで全く問題ないのですが。リソース情報もほしいということなので質問させていただきます。

     

    現在サーバにFTPするためのソースは以下のコードになります。

    この関数を使用し、サーバにFTP転送するとMacのリソースフォークがないファイルになってしまいます。

    フリーのFTPツールを使っても同様です。

    Socket通信を使用したプログラムでも同様でした。

     

    Windows環境にコピーしてきたEPSファイルにはリソースフォークが残っていることは確認済みです。

    なにかいい方法がありましたらご教授願います。

     

        Public Function FTP_KIKAN_Upload(ByVal InServerIP As String, ByVal InLocalFileName As String, ByVal InLocalPath As String, ByVal InServerPath As String, Optional ByVal InServerFileName As String = "") As Boolean
            On Error GoTo Err_Func
            Dim strWork() As String
            Dim strProgramName As String

            mLastErrorMessage = ""
            mLastErrorNumber = 0
            FTP_KIKAN_Upload = False

            If InLocalFileName = "" Then
                GoTo Exit_Func
            End If

            Dim uri As String = "ftp://" & InServerIP & "/" & InServerPath & IIf(InServerFileName = "", InLocalFileName, InServerFileName)
            Dim myFile As String = InLocalPath & InLocalFileName
            Dim req As WebRequest = WebRequest.Create(uri)

            req.Credentials = New NetworkCredential("userid", "password")
            req.Method = WebRequestMethods.Ftp.UploadFile

            Using st As Stream = req.GetRequestStream()
                Using fs As New FileStream(myFile, FileMode.Open)
                    Dim buf(1024) As Byte
                    Dim count As Integer = 0

                    Do
                        count = fs.Read(buf, 0, buf.Length)
                        st.Write(buf, 0, count)
                    Loop While count <> 0
                End Using
            End Using


            FTP_KIKAN_Upload = True

    Exit_Func:
            On Error Resume Next
            Exit Function

    Err_Func:
            mLastErrorMessage = Err.Description
            mLastErrorNumber = Err.Number
            'Call DispErrMsg("X", Err.Number, "clsFunc.FTP_KIKAN_Upload:" & Err.Description)
            Resume Exit_Func

        End Function

     

    2008年11月29日 8:11

回答

  •  あんまりMacについて詳しくないのでアレですが…。

     

     WindowsではMacのリソースフォークをそのまま扱う事ができません。

     ただしNTFSには代替ストリームという機能が利用でき、これを使ってリソースフォークを保存していると思われます。

    (代替ストリームについては検索して初めて知ったんですが)

     

     代替ストリームはファイルと関連しますが、扱いとしては実ファイルとは別となるため、FTPでファイル転送するとリソースフォークの内容が消えてしまうと思われます。

     対策としてですが、何らかのツールを使ってEPSファイルと代替ストリームを分離して両方のファイルをFTPで転送後、転送先でEPSファイルと代替ストリームを結合すれば何とかなるのでは? と思います。

     詳細については、何らかの検索エンジンで"NTFS 代替ストリーム"で検索してみてください。

     

     実際の手順について示す事ができませんが、何らかのヒントになればと思います。

     

    2008年11月29日 13:07
  •  こちらでも色々調べてみましたが、代替ストリーム自体がファイルシステム(NTFS)に依存するのに加え、Windowsの標準コマンドで扱えないため通常の方法ではできそうもありません。

     例えばzipで圧縮してみましたが、圧縮後のファイルには代替ストリームの情報は削除されていました。

     NTFSからNTFSへのコピーが唯一できました。

     

     対応策として考えられるのは、代替ストリームを扱えるツールを使って代替ストリームに格納されたデータを抽出し、それらのファイルをFTPで転送し、転送先で代替ストリームに格納(Macであればリソースフォークに格納)するという事が考えられます。

    (あまり参考にならないかもしれませんが…)

    2008年12月2日 11:46

すべての返信

  •  あんまりMacについて詳しくないのでアレですが…。

     

     WindowsではMacのリソースフォークをそのまま扱う事ができません。

     ただしNTFSには代替ストリームという機能が利用でき、これを使ってリソースフォークを保存していると思われます。

    (代替ストリームについては検索して初めて知ったんですが)

     

     代替ストリームはファイルと関連しますが、扱いとしては実ファイルとは別となるため、FTPでファイル転送するとリソースフォークの内容が消えてしまうと思われます。

     対策としてですが、何らかのツールを使ってEPSファイルと代替ストリームを分離して両方のファイルをFTPで転送後、転送先でEPSファイルと代替ストリームを結合すれば何とかなるのでは? と思います。

     詳細については、何らかの検索エンジンで"NTFS 代替ストリーム"で検索してみてください。

     

     実際の手順について示す事ができませんが、何らかのヒントになればと思います。

     

    2008年11月29日 13:07
  •  

    CatTail様

     

    返信ありがとうございます。

    さっそく、代替ストリームに関し、勉強しいろいろ試行錯誤してみます。

     

    Windows上でリソースフォークごと圧縮する方法はないのでしょうか?

    それができれば、FTP転送後もリソースフォークを失わなくてすむと考えています。

     

    他にいい案がありましたらお願いします。

    こちらも、随時報告いたします。

    2008年12月1日 1:37
  •  こちらでも色々調べてみましたが、代替ストリーム自体がファイルシステム(NTFS)に依存するのに加え、Windowsの標準コマンドで扱えないため通常の方法ではできそうもありません。

     例えばzipで圧縮してみましたが、圧縮後のファイルには代替ストリームの情報は削除されていました。

     NTFSからNTFSへのコピーが唯一できました。

     

     対応策として考えられるのは、代替ストリームを扱えるツールを使って代替ストリームに格納されたデータを抽出し、それらのファイルをFTPで転送し、転送先で代替ストリームに格納(Macであればリソースフォークに格納)するという事が考えられます。

    (あまり参考にならないかもしれませんが…)

    2008年12月2日 11:46
  • こんにちは。中川俊輔 です。

     

    CatTailさん、回答ありがとうございます。

     

    QandYさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、CatTailさんの回答へ回答済みチェックをつけさせていただきました。

    私もリソースフォークの扱いはよくわかっていないのですが、

    リソースフォークファイルを一緒にコピー、もしくは圧縮してあげることならできるかもしれません。

    http://www.microsoft.com/japan/mac/collaboration/mmw/mmw01.mspx

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2008年12月15日 8:32