Запись строки ANSI в файл Unicode по FTP - PullRequest
3 голосов
/ 31 марта 2011

У меня есть следующая функция Visual Basic 6.0, которая записывает строку ANSI в новый файл по FTP. Я хотел бы написать файл в формате UTF-16LE. Есть ли хороший способ сделать это в следующем методе?

Public Sub writeToFile(ByVal FTPServer As String _
                 , ByVal userName As String _
                 , ByVal password As String _
                 , ByVal contents As String _
                 , ByVal destinationFile As String)

    Dim hFile As Long
    Dim lCount As Long

    inetOpen
    inetConnect FTPServer, userName, password
    hFile = apiFtpOpenFile(m_hFTP, destinationFile, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0&)
    If hFile = 0 Then
        Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
    End If

    If apiInternetWriteFile(hFile, contents, Len(contents), lCount) = 0 Then
        Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
    End If

    apiInternetCloseHandle hFile
End Sub

Я не делал Visual Basic 6.0 около 10 лет, поэтому в лучшем случае я шаткий. Любой вклад будет принята с благодарностью.

Вот объявление apiInternetWriteFile;

Private Declare Function apiInternetWriteFile Lib "wininet.dll" Alias "InternetWriteFile" ( _
                         ByVal hFile As Long _
                       , ByVal lpBuffer As String _
                       , ByVal dwNumberOfBytesToWrite As Long _
                       , ByRef lpdwNumberOfBytesWritten As Long) As Long

1 Ответ

2 голосов
/ 31 марта 2011

Нам нужно увидеть объявление для apiInternetWriteFile. Я почти уверен, что это Declare в вызове API, может быть что-то в WinINet.dll. Я думаю, что вам нужно:

  • Измените Объявление, чтобы оно ожидало ByVal Long для второго аргумента
  • РЕДАКТИРОВАТЬ , чтобы получить спецификацию в начале, попробуйте Contents = ChrW(&HFEFF&) & Contents. Или возможно FFEF, не уверенный в порядке байтов.
  • Передача StrPtr(contents) для второго аргумента
  • Передать Len(contents)*2 для 3-го аргумента (длина в байтах)

Это передаст строку Unicode UTF-16 в качестве аргумента содержимого

...