前提: WinInet FtpGetFile を使用して FTP 経由で Linux から Windows にファイルをコピーする。
目的: ファイルは ANSI として作成され、Unicode で必要とされます。
進行状況: 私が抱えている唯一の問題は、元のファイルの LF 文字を宛先ファイルの CRLF 文字にする必要があることです。
私が試してみました:
Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileW" (ByVal hFTP As Long, ByVal sRemoteFile As String, ByVal sNewFile As String, ByVal bFailIfExists As Boolean, ByVal lFlagsAndAttributes As Long, ByVal lFlags As Long, ByVal lContext As Long) As Boolean
Public Sub test(hConn as Long, strSrcPath as String, strDestPath as String)
'All code works other than the file not converting to having CR chars
ftpGetFile(hConn, StrConv(strSrcPath, vbUnicode), StrConv(strDestPath, vbUnicode), True, 0, 0, 0)
End Sub
- (変換に失敗)
FtpGetFile
メソッド (Alias FtpGetFileW
) の Unicode バージョンを使用し、 を使用して引数を渡しますStrConv(<string>, vbUnicode)
。ファイルは、行末に LF 文字のみで表示されます。 - (WORKS、手動)WinSCPを使用してファイルを手動でコピーします。出力ファイルを自動的にユニコードにしますが、これに関連するメソッド/設定が見つかりません。WinSCP.dll を登録できないため、職場で使用できません。
- (ゆっくりと動作します)回避策を使用します。のいずれかのバージョンを使用します
FtpGetFile
。ファイルを開き、変数を読み取り、ファイルを閉じてから、書き込み用にファイルを開き、書き込みReplace(variable,Chr(10),Chr(13)&Chr(10))
ます。また、ファイルのサイズが ~2 倍に見えます。
WinAPI 関数を使用してファイルを取得し、(可能であれば) 1 回で変換するにはどうすればよいですか?
関連記事:
FTP 転送後に Unicode が ANSI に変換さ
れる FTP 経由で ANSI 文字列を Unicode ファイルに書き込む