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

質問
-
開発環境
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 StringmLastErrorMessage = ""
mLastErrorNumber = 0
FTP_KIKAN_Upload = FalseIf InLocalFileName = "" Then
GoTo Exit_Func
End IfDim 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.UploadFileUsing st As Stream = req.GetRequestStream()
Using fs As New FileStream(myFile, FileMode.Open)
Dim buf(1024) As Byte
Dim count As Integer = 0Do
count = fs.Read(buf, 0, buf.Length)
st.Write(buf, 0, count)
Loop While count <> 0
End Using
End Using
FTP_KIKAN_Upload = TrueExit_Func:
On Error Resume Next
Exit FunctionErr_Func:
mLastErrorMessage = Err.Description
mLastErrorNumber = Err.Number
'Call DispErrMsg("X", Err.Number, "clsFunc.FTP_KIKAN_Upload:" & Err.Description)
Resume Exit_FuncEnd Function
回答
-
あんまりMacについて詳しくないのでアレですが…。
WindowsではMacのリソースフォークをそのまま扱う事ができません。
ただしNTFSには代替ストリームという機能が利用でき、これを使ってリソースフォークを保存していると思われます。
(代替ストリームについては検索して初めて知ったんですが)
代替ストリームはファイルと関連しますが、扱いとしては実ファイルとは別となるため、FTPでファイル転送するとリソースフォークの内容が消えてしまうと思われます。
対策としてですが、何らかのツールを使ってEPSファイルと代替ストリームを分離して両方のファイルをFTPで転送後、転送先でEPSファイルと代替ストリームを結合すれば何とかなるのでは? と思います。
詳細については、何らかの検索エンジンで"NTFS 代替ストリーム"で検索してみてください。
実際の手順について示す事ができませんが、何らかのヒントになればと思います。
-
こちらでも色々調べてみましたが、代替ストリーム自体がファイルシステム(NTFS)に依存するのに加え、Windowsの標準コマンドで扱えないため通常の方法ではできそうもありません。
例えばzipで圧縮してみましたが、圧縮後のファイルには代替ストリームの情報は削除されていました。
NTFSからNTFSへのコピーが唯一できました。
対応策として考えられるのは、代替ストリームを扱えるツールを使って代替ストリームに格納されたデータを抽出し、それらのファイルをFTPで転送し、転送先で代替ストリームに格納(Macであればリソースフォークに格納)するという事が考えられます。
(あまり参考にならないかもしれませんが…)
すべての返信
-
あんまりMacについて詳しくないのでアレですが…。
WindowsではMacのリソースフォークをそのまま扱う事ができません。
ただしNTFSには代替ストリームという機能が利用でき、これを使ってリソースフォークを保存していると思われます。
(代替ストリームについては検索して初めて知ったんですが)
代替ストリームはファイルと関連しますが、扱いとしては実ファイルとは別となるため、FTPでファイル転送するとリソースフォークの内容が消えてしまうと思われます。
対策としてですが、何らかのツールを使ってEPSファイルと代替ストリームを分離して両方のファイルをFTPで転送後、転送先でEPSファイルと代替ストリームを結合すれば何とかなるのでは? と思います。
詳細については、何らかの検索エンジンで"NTFS 代替ストリーム"で検索してみてください。
実際の手順について示す事ができませんが、何らかのヒントになればと思います。
-
こちらでも色々調べてみましたが、代替ストリーム自体がファイルシステム(NTFS)に依存するのに加え、Windowsの標準コマンドで扱えないため通常の方法ではできそうもありません。
例えばzipで圧縮してみましたが、圧縮後のファイルには代替ストリームの情報は削除されていました。
NTFSからNTFSへのコピーが唯一できました。
対応策として考えられるのは、代替ストリームを扱えるツールを使って代替ストリームに格納されたデータを抽出し、それらのファイルをFTPで転送し、転送先で代替ストリームに格納(Macであればリソースフォークに格納)するという事が考えられます。
(あまり参考にならないかもしれませんが…)
-
こんにちは。中川俊輔 です。
CatTailさん、回答ありがとうございます。
QandYさん、フォーラムのご利用ありがとうございます。
有用な情報と思われたため、CatTailさんの回答へ回答済みチェックをつけさせていただきました。
私もリソースフォークの扱いはよくわかっていないのですが、
リソースフォークファイルを一緒にコピー、もしくは圧縮してあげることならできるかもしれません。
http://www.microsoft.com/japan/mac/collaboration/mmw/mmw01.mspx
今後ともフォーラムをよろしくお願いします。
それでは!