Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
class Program
{
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpen(string pszUserAgent, uint dwAccessType, string pszProxyName, string pszProxyBypass, uint dwFlags);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpConnect(IntPtr hSession, string pswzServerName, ushort nServerPort, uint dwReserved);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpenRequest(IntPtr hConnect, string pwszVerb, string pwszObjectName, string pwszVersion, string pwszReferrer, IntPtr ppwszAcceptTypes, uint dwFlags);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpSendRequest(IntPtr hRequest, string pwszHeaders, uint dwHeadersLength, IntPtr lpOptional, uint dwOptionalLength, uint dwTotalLength, IntPtr dwContext);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpReceiveResponse(IntPtr hRequest, IntPtr lpReserved);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpWriteData(IntPtr hRequest, IntPtr lpBuffer, uint dwBufferLength, out uint lpdwWritten);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern void WinHttpCloseHandle(IntPtr hHandle);
public static void UploadFiles(string url, string[] filePaths)
{
string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
StringBuilder headerBuilder = new StringBuilder();
headerBuilder.AppendLine("Content-Type: multipart/form-data; boundary=" + boundary);
IntPtr hSession = WinHttpOpen("My User Agent", 0, null, null, 0);
IntPtr hConnect = WinHttpConnect(hSession, "yourserver.com", 80, 0);
IntPtr hRequest = WinHttpOpenRequest(hConnect, "POST", "/upload", null, null, IntPtr.Zero, 0);
// Prepare the multipart content
using (MemoryStream ms = new MemoryStream())
{
foreach (var filePath in filePaths)
{
string fileName = Path.GetFileName(filePath);
byte[] fileData = File.ReadAllBytes(filePath);
// Add file part
ms.Write(Encoding.UTF8.GetBytes("--" + boundary + "\r\n"));
ms.Write(Encoding.UTF8.GetBytes($"Content-Disposition: form-data; name=\"files[]\"; filename=\"{fileName}\"\r\n"));
ms.Write(Encoding.UTF8.GetBytes("Content-Type: application/octet-stream\r\n\r\n"));
ms.Write(fileData);
ms.Write(Encoding.UTF8.GetBytes("\r\n"));
}
ms.Write(Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"));
// Send request
byte[] requestData = ms.ToArray();
uint dataLength = (uint)requestData.Length;
IntPtr ptrData = Marshal.AllocHGlobal(requestData.Length);
Marshal.Copy(requestData, 0, ptrData, requestData.Length);
WinHttpSendRequest(hRequest, headerBuilder.ToString(), (uint)headerBuilder.Length, IntPtr.Zero, 0, dataLength, IntPtr.Zero);
uint bytesWritten;
WinHttpWriteData(hRequest, ptrData, dataLength, out bytesWritten);
WinHttpReceiveResponse(hRequest, IntPtr.Zero);
// Clean up
Marshal.FreeHGlobal(ptrData);
}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
}
static void Main(string[] args)
{
string[] filesToUpload = { "path/to/your/file1.txt", "path/to/your/file2.jpg" };
UploadFiles("http://yourserver.com/upload", filesToUpload);
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-its-true