Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга бежафоанк nsfkck
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
class WinHttpUploadFileExample
{
// Khai báo các hàm từ winhttp.dll
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpen(
[MarshalAs(UnmanagedType.LPWStr)] string pwszUserAgent,
uint dwAccessType,
IntPtr pwszProxyName,
IntPtr pwszProxyBypass,
uint dwFlags);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpConnect(
IntPtr hSession,
[MarshalAs(UnmanagedType.LPWStr)] string pswzServerName,
ushort nServerPort,
uint dwReserved);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpenRequest(
IntPtr hConnect,
[MarshalAs(UnmanagedType.LPWStr)] string pwszVerb,
[MarshalAs(UnmanagedType.LPWStr)] string pwszObjectName,
[MarshalAs(UnmanagedType.LPWStr)] string pwszVersion,
[MarshalAs(UnmanagedType.LPWStr)] string pwszReferrer,
IntPtr[] ppwszAcceptTypes,
uint dwFlags);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpSendRequest(
IntPtr hRequest,
[MarshalAs(UnmanagedType.LPWStr)] 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 dwNumberOfBytesToWrite,
out uint lpdwNumberOfBytesWritten);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpCloseHandle(IntPtr hInternet);
// Constants for the WinHttpOpen function
public const uint WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0;
public const uint WINHTTP_FLAG_SECURE = 0x00800000;
public static void Main()
{
string filePath = @"C:\Users\HP\Downloads\TestUpload.txt"; // Đường dẫn tới tệp bạn muốn upload
string serverUrl = "/upload"; // Đường dẫn URL upload trên server
string serverHost = "www.example.com"; // Tên miền hoặc địa chỉ IP của server
// Mở phiên làm việc HTTP
IntPtr hSession = WinHttpOpen("WinHTTP Example/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, IntPtr.Zero, IntPtr.Zero, 0);
if (hSession != IntPtr.Zero)
{
// Kết nối tới máy chủ
IntPtr hConnect = WinHttpConnect(hSession, serverHost, 80, 0);
if (hConnect != IntPtr.Zero)
{
// Mở yêu cầu POST
IntPtr hRequest = WinHttpOpenRequest(hConnect, "POST", serverUrl, null, null, null, 0);
if (hRequest != IntPtr.Zero)
{
// Đọc nội dung tệp từ local
byte[] fileBytes = File.ReadAllBytes(filePath);
uint fileSize = (uint)fileBytes.Length;
// Chuẩn bị dữ liệu để upload
IntPtr buffer = Marshal.AllocHGlobal(fileBytes.Length);
Marshal.Copy(fileBytes, 0, buffer, fileBytes.Length);
// Gửi yêu cầu với dữ liệu tệp
bool requestSent = WinHttpSendRequest(hRequest, "Content-Type: application/octet-stream\r\n", 0, IntPtr.Zero, 0, fileSize, IntPtr.Zero);
if (requestSent)
{
uint bytesWritten = 0;
bool dataWritten = WinHttpWriteData(hRequest, buffer, fileSize, out bytesWritten);
if (dataWritten && bytesWritten == fileSize)
{
Console.WriteLine("File đã được gửi thành công!");
// Nhận phản hồi từ máy chủ
if (WinHttpReceiveResponse(hRequest, IntPtr.Zero))
{
Console.WriteLine("Server đã nhận file!");
}
else
{
Console.WriteLine("Lỗi: Không nhận được phản hồi từ máy chủ.");
}
}
else
{
Console.WriteLine("Lỗi: Không thể gửi dữ liệu tệp.");
}
}
else
{
Console.WriteLine("Lỗi: Không thể gửi yêu cầu.");
}
// Giải phóng bộ nhớ
Marshal.FreeHGlobal(buffer);
WinHttpCloseHandle(hRequest);
}
WinHttpCloseHandle(hConnect);
}
WinHttpCloseHandle(hSession);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-its-true