Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck
using System;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Text;
class Program
{
// Khai báo P/Invoke cho WinHttpOpen
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpen(
[MarshalAs(UnmanagedType.LPWStr)] string pwszUserAgent, // User-Agent
uint dwAccessType, // Loại truy cập mạng (proxy hoặc không)
string pwszProxyName, // Tên proxy (hoặc null)
string pwszProxyBypass, // Bypass proxy (hoặc null)
uint dwFlags // Cờ cho phiên làm việc
);
// Khai báo P/Invoke cho WinHttpConnect
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpConnect(
IntPtr hSession, // Handle của session
[MarshalAs(UnmanagedType.LPWStr)] string pswzServerName, // Tên máy chủ (hostname)
ushort dwServerPort, // Cổng máy chủ
uint dwReserved // Dành cho mở rộng
);
// Khai báo P/Invoke cho WinHttpOpenRequest
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpenRequest(
IntPtr hConnect, // Handle của kết nối
[MarshalAs(UnmanagedType.LPWStr)] string pwszVerb, // Phương thức HTTP (GET, POST, v.v.)
[MarshalAs(UnmanagedType.LPWStr)] string pwszObjectName, // Đường dẫn tới đối tượng
[MarshalAs(UnmanagedType.LPWStr)] string pwszVersion, // Phiên bản HTTP
[MarshalAs(UnmanagedType.LPWStr)] string pwszReferer, // Referer URL
IntPtr ppwszAcceptTypes, // Các loại MIME chấp nhận
uint dwFlags // Cờ cho yêu cầu
);
// Khai báo P/Invoke cho WinHttpSendRequest
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpSendRequest(
IntPtr hRequest, // Handle của yêu cầu
[MarshalAs(UnmanagedType.LPWStr)] string pwszHeaders, // Tiêu đề HTTP
uint dwHeadersLength, // Độ dài của tiêu đề
IntPtr lpOptional, // Dữ liệu tùy chọn
uint dwOptionalLength, // Độ dài dữ liệu tùy chọn
uint dwTotalLength, // Độ dài tổng thể
IntPtr dwContext // Dữ liệu ngữ cảnh
);
// Khai báo P/Invoke cho WinHttpReceiveResponse
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpReceiveResponse(
IntPtr hRequest, // Handle của yêu cầu
IntPtr lpReserved // Dành cho mở rộng
);
// Khai báo P/Invoke cho WinHttpQueryDataAvailable
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpQueryDataAvailable(
IntPtr hRequest, // Handle của yêu cầu
ref uint dwSize // Kích thước dữ liệu sẵn có
);
// Khai báo P/Invoke cho WinHttpReadData
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpReadData(
IntPtr hRequest, // Handle của yêu cầu
IntPtr lpBuffer, // Buffer để đọc dữ liệu
uint dwSize, // Kích thước dữ liệu cần đọc
ref uint dwDownloaded // Kích thước dữ liệu đã tải xuống
);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpWriteData(
IntPtr hRequest,
IntPtr lpBuffer,
uint dwNumberOfBytesToWrite,
ref uint dwNumberOfBytesWritten);
// Khai báo P/Invoke cho WinHttpCloseHandle
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpCloseHandle(IntPtr hInternet);
// Các giá trị cố định
public const uint WINHTTP_ACCESS_TYPE_NO_PROXY = 1; // Không sử dụng proxy
public const uint WINHTTP_NO_PROXY_NAME = 0; // NULL
public const uint WINHTTP_NO_PROXY_BYPASS = 0; // NULL
public const ushort INTERNET_DEFAULT_HTTP_PORT = 80; // Cổng mặc định cho HTTP
public const ushort INTERNET_DEFAULT_HTTPS_PORT = 443; // Cổng mặc định cho HTTPS
static void Main(string[] args)
{
string url = "http://localhost:8080/api/upload"; // Địa chỉ API của bạn
string filePath = @"D:\test1.txt"; // Đường dẫn đến file bạn muốn upload
string input = "some text"; // Dữ liệu văn bản
// Khởi tạo WinHTTP
IntPtr hSession = WinHttpOpen("WinHTTP Example/1.0", 0, null, null, 0);
IntPtr hConnect = WinHttpConnect(hSession, "localhost", 8080, 0);
IntPtr hRequest = WinHttpOpenRequest(hConnect, "POST", "/api/todos/upload", null, null, IntPtr.Zero, 0);
// Tạo headers cho multipart/form-data
string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
string header = $"Content-Type: multipart/form-data; boundary={boundary}\r\n";
// Gửi request đầu tiên
bool send = WinHttpSendRequest(hRequest, header, (uint)header.Length, IntPtr.Zero, 0, 400, IntPtr.Zero);
// Gửi dữ liệu văn bản
string textPart = $"--{boundary}\r\nContent-Disposition: form-data; name=\"textData\"\r\n\r\n{input}\r\n";
byte[] textBytes = Encoding.UTF8.GetBytes(textPart);
IntPtr ptrText = Marshal.AllocHGlobal(textBytes.Length);
Marshal.Copy(textBytes, 0, ptrText, textBytes.Length);
uint bytesWritten = 0;
bool writeData = WinHttpWriteData(hRequest, ptrText, (uint)textBytes.Length, ref bytesWritten);
int error = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrText);
// Gửi file
string filePart = $"--{boundary}\r\nContent-Disposition: form-data; name=\"files[]\"; filename=\"{Path.GetFileName(filePath)}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
byte[] filePartBytes = Encoding.UTF8.GetBytes(filePart);
IntPtr ptrFilePart = Marshal.AllocHGlobal(filePartBytes.Length);
Marshal.Copy(filePartBytes, 0, ptrFilePart, filePartBytes.Length);
bool writeData1 = WinHttpWriteData(hRequest, ptrFilePart, (uint)filePartBytes.Length, ref bytesWritten);
int error1 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrFilePart);
// Gửi nội dung file
byte[] fileBytes = File.ReadAllBytes(filePath);
IntPtr ptrFile = Marshal.AllocHGlobal(fileBytes.Length);
Marshal.Copy(fileBytes, 0, ptrFile, fileBytes.Length);
bool writeData2 = WinHttpWriteData(hRequest, ptrFile, (uint)fileBytes.Length, ref bytesWritten);
int error2 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrFile);
// Kết thúc request với boundary
string endBoundary = $"\r\n--{boundary}--\r\n";
byte[] endBytes = Encoding.UTF8.GetBytes(endBoundary);
IntPtr ptrEnd = Marshal.AllocHGlobal(endBytes.Length);
Marshal.Copy(endBytes, 0, ptrEnd, endBytes.Length);
bool writeData3 = WinHttpWriteData(hRequest, ptrEnd, (uint)endBytes.Length, ref bytesWritten);
int error3 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrEnd);
// Nhận phản hồi
WinHttpReceiveResponse(hRequest, IntPtr.Zero);
uint dataSize = 0;
if (WinHttpQueryDataAvailable(hRequest, ref dataSize) && dataSize > 0)
{
// Tạo buffer để chứa dữ liệu phản hồi
IntPtr buffer = Marshal.AllocHGlobal((int)dataSize);
try
{
uint bytesRead = 0;
// Đọc dữ liệu từ phản hồi
if (WinHttpReadData(hRequest, buffer, dataSize, ref bytesRead))
{
// Chuyển đổi dữ liệu từ buffer sang chuỗi
byte[] responseBytes = new byte[bytesRead];
Marshal.Copy(buffer, responseBytes, 0, (int)bytesRead);
string responseText = Encoding.UTF8.GetString(responseBytes);
// In ra phản hồi
Console.WriteLine("Response: " + responseText);
}
else
{
Console.WriteLine("Failed to read data.");
}
}
finally
{
// Giải phóng bộ nhớ cho buffer
Marshal.FreeHGlobal(buffer);
}
}
else
{
Console.WriteLine("No data available to read.");
}
// Đóng kết nối
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-its-true
WIN32_FIND_DATA это правда [закрыто] ⇐ C#
Место общения программистов C#
1729784324
Anonymous
Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck Это правда? Я хочу использовать WIN32_FIND_DATA для C#. Я хочу проверить, есть ли в приведенном ниже коде какие-либо ошибки для C#.
Пожалуйста, покажите мне другой способ, если вы найдете другой код получше.
Привет всем, привет. бродяга bejafoanc nsfkck
using System;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Text;
class Program
{
// Khai báo P/Invoke cho WinHttpOpen
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpen(
[MarshalAs(UnmanagedType.LPWStr)] string pwszUserAgent, // User-Agent
uint dwAccessType, // Loại truy cập mạng (proxy hoặc không)
string pwszProxyName, // Tên proxy (hoặc null)
string pwszProxyBypass, // Bypass proxy (hoặc null)
uint dwFlags // Cờ cho phiên làm việc
);
// Khai báo P/Invoke cho WinHttpConnect
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpConnect(
IntPtr hSession, // Handle của session
[MarshalAs(UnmanagedType.LPWStr)] string pswzServerName, // Tên máy chủ (hostname)
ushort dwServerPort, // Cổng máy chủ
uint dwReserved // Dành cho mở rộng
);
// Khai báo P/Invoke cho WinHttpOpenRequest
[DllImport("winhttp.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpenRequest(
IntPtr hConnect, // Handle của kết nối
[MarshalAs(UnmanagedType.LPWStr)] string pwszVerb, // Phương thức HTTP (GET, POST, v.v.)
[MarshalAs(UnmanagedType.LPWStr)] string pwszObjectName, // Đường dẫn tới đối tượng
[MarshalAs(UnmanagedType.LPWStr)] string pwszVersion, // Phiên bản HTTP
[MarshalAs(UnmanagedType.LPWStr)] string pwszReferer, // Referer URL
IntPtr ppwszAcceptTypes, // Các loại MIME chấp nhận
uint dwFlags // Cờ cho yêu cầu
);
// Khai báo P/Invoke cho WinHttpSendRequest
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpSendRequest(
IntPtr hRequest, // Handle của yêu cầu
[MarshalAs(UnmanagedType.LPWStr)] string pwszHeaders, // Tiêu đề HTTP
uint dwHeadersLength, // Độ dài của tiêu đề
IntPtr lpOptional, // Dữ liệu tùy chọn
uint dwOptionalLength, // Độ dài dữ liệu tùy chọn
uint dwTotalLength, // Độ dài tổng thể
IntPtr dwContext // Dữ liệu ngữ cảnh
);
// Khai báo P/Invoke cho WinHttpReceiveResponse
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpReceiveResponse(
IntPtr hRequest, // Handle của yêu cầu
IntPtr lpReserved // Dành cho mở rộng
);
// Khai báo P/Invoke cho WinHttpQueryDataAvailable
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpQueryDataAvailable(
IntPtr hRequest, // Handle của yêu cầu
ref uint dwSize // Kích thước dữ liệu sẵn có
);
// Khai báo P/Invoke cho WinHttpReadData
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpReadData(
IntPtr hRequest, // Handle của yêu cầu
IntPtr lpBuffer, // Buffer để đọc dữ liệu
uint dwSize, // Kích thước dữ liệu cần đọc
ref uint dwDownloaded // Kích thước dữ liệu đã tải xuống
);
[DllImport("winhttp.dll", SetLastError = true)]
public static extern bool WinHttpWriteData(
IntPtr hRequest,
IntPtr lpBuffer,
uint dwNumberOfBytesToWrite,
ref uint dwNumberOfBytesWritten);
// Khai báo P/Invoke cho WinHttpCloseHandle
[DllImport("winhttp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WinHttpCloseHandle(IntPtr hInternet);
// Các giá trị cố định
public const uint WINHTTP_ACCESS_TYPE_NO_PROXY = 1; // Không sử dụng proxy
public const uint WINHTTP_NO_PROXY_NAME = 0; // NULL
public const uint WINHTTP_NO_PROXY_BYPASS = 0; // NULL
public const ushort INTERNET_DEFAULT_HTTP_PORT = 80; // Cổng mặc định cho HTTP
public const ushort INTERNET_DEFAULT_HTTPS_PORT = 443; // Cổng mặc định cho HTTPS
static void Main(string[] args)
{
string url = "http://localhost:8080/api/upload"; // Địa chỉ API của bạn
string filePath = @"D:\test1.txt"; // Đường dẫn đến file bạn muốn upload
string input = "some text"; // Dữ liệu văn bản
// Khởi tạo WinHTTP
IntPtr hSession = WinHttpOpen("WinHTTP Example/1.0", 0, null, null, 0);
IntPtr hConnect = WinHttpConnect(hSession, "localhost", 8080, 0);
IntPtr hRequest = WinHttpOpenRequest(hConnect, "POST", "/api/todos/upload", null, null, IntPtr.Zero, 0);
// Tạo headers cho multipart/form-data
string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
string header = $"Content-Type: multipart/form-data; boundary={boundary}\r\n";
// Gửi request đầu tiên
bool send = WinHttpSendRequest(hRequest, header, (uint)header.Length, IntPtr.Zero, 0, 400, IntPtr.Zero);
// Gửi dữ liệu văn bản
string textPart = $"--{boundary}\r\nContent-Disposition: form-data; name=\"textData\"\r\n\r\n{input}\r\n";
byte[] textBytes = Encoding.UTF8.GetBytes(textPart);
IntPtr ptrText = Marshal.AllocHGlobal(textBytes.Length);
Marshal.Copy(textBytes, 0, ptrText, textBytes.Length);
uint bytesWritten = 0;
bool writeData = WinHttpWriteData(hRequest, ptrText, (uint)textBytes.Length, ref bytesWritten);
int error = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrText);
// Gửi file
string filePart = $"--{boundary}\r\nContent-Disposition: form-data; name=\"files[]\"; filename=\"{Path.GetFileName(filePath)}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
byte[] filePartBytes = Encoding.UTF8.GetBytes(filePart);
IntPtr ptrFilePart = Marshal.AllocHGlobal(filePartBytes.Length);
Marshal.Copy(filePartBytes, 0, ptrFilePart, filePartBytes.Length);
bool writeData1 = WinHttpWriteData(hRequest, ptrFilePart, (uint)filePartBytes.Length, ref bytesWritten);
int error1 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrFilePart);
// Gửi nội dung file
byte[] fileBytes = File.ReadAllBytes(filePath);
IntPtr ptrFile = Marshal.AllocHGlobal(fileBytes.Length);
Marshal.Copy(fileBytes, 0, ptrFile, fileBytes.Length);
bool writeData2 = WinHttpWriteData(hRequest, ptrFile, (uint)fileBytes.Length, ref bytesWritten);
int error2 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrFile);
// Kết thúc request với boundary
string endBoundary = $"\r\n--{boundary}--\r\n";
byte[] endBytes = Encoding.UTF8.GetBytes(endBoundary);
IntPtr ptrEnd = Marshal.AllocHGlobal(endBytes.Length);
Marshal.Copy(endBytes, 0, ptrEnd, endBytes.Length);
bool writeData3 = WinHttpWriteData(hRequest, ptrEnd, (uint)endBytes.Length, ref bytesWritten);
int error3 = Marshal.GetLastWin32Error();
Marshal.FreeHGlobal(ptrEnd);
// Nhận phản hồi
WinHttpReceiveResponse(hRequest, IntPtr.Zero);
uint dataSize = 0;
if (WinHttpQueryDataAvailable(hRequest, ref dataSize) && dataSize > 0)
{
// Tạo buffer để chứa dữ liệu phản hồi
IntPtr buffer = Marshal.AllocHGlobal((int)dataSize);
try
{
uint bytesRead = 0;
// Đọc dữ liệu từ phản hồi
if (WinHttpReadData(hRequest, buffer, dataSize, ref bytesRead))
{
// Chuyển đổi dữ liệu từ buffer sang chuỗi
byte[] responseBytes = new byte[bytesRead];
Marshal.Copy(buffer, responseBytes, 0, (int)bytesRead);
string responseText = Encoding.UTF8.GetString(responseBytes);
// In ra phản hồi
Console.WriteLine("Response: " + responseText);
}
else
{
Console.WriteLine("Failed to read data.");
}
}
finally
{
// Giải phóng bộ nhớ cho buffer
Marshal.FreeHGlobal(buffer);
}
}
else
{
Console.WriteLine("No data available to read.");
}
// Đóng kết nối
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79092472/win32-find-data-its-true[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия