powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись файла
10 сообщений из 10, страница 1 из 1
Запись файла
    #39929769
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

У меня почему-то не получается записать файл с помощью WinAPI.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[DllImport("kernel32.dll",CharSet=CharSet.Unicode,SetLastError=true)]
public static extern IntPtr CreateFileW(string a,int b,int c,IntPtr d,int e,int f,IntPtr g);
[DllImport("kernel32.dll",CharSet=CharSet.Unicode,SetLastError=true)]
public static extern bool CloseHandle(IntPtr a);
[DllImport("kernel32.dll",CharSet=CharSet.Unicode,SetLastError=true)]
public static extern bool WriteFile(IntPtr a,IntPtr b,int c,IntPtr d,IntPtr e);
IntPtr p=Marshal.AllocCoTaskMem(512); 
IntPtr h=CreateFileW("C:\\111.txt",0x40000000,0,IntPtr.Zero,1,0,IntPtr.Zero);
bool z=WriteFile(h,p,200,IntPtr.Zero,IntPtr.Zero);    
Marshal.FreeCoTaskMem(p);    
bool b=CloseHandle(h);



Что можно сделать?
...
Рейтинг: 0 / 0
Запись файла
    #39929781
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus,

1. Какая ошибка?
2. Зачем WinAPI?
...
Рейтинг: 0 / 0
Запись файла
    #39929790
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, вот такая.

System.AccessViolationException:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
...
Рейтинг: 0 / 0
Запись файла
    #39929838
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж винапи (которое действительно непонятно зачем), то после вызова методов надо проверять результат (у CreateFileW на INVALID_HANDLE_VALUE, у WriteFile на false), и в случае возврата, сообщающего об ошибке, вызывать GetLastError, или Marshal.GetLastWin32Error. Ну и потом, чтобы было понятно, что это было - FormatMessage c выводом результата.
...
Рейтинг: 0 / 0
Запись файла
    #39929867
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus
Что можно сделать?

внимательно прочитать https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile

lpNumberOfBytesWritten - This parameter can be NULL only when the lpOverlapped parameter is not NULL

поэтому и "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
...
Рейтинг: 0 / 0
Запись файла
    #39929918
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил, ну а какие должны быть два последних параметра?
...
Рейтинг: 0 / 0
Запись файла
    #39929931
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus,

последний - IntPtr.Zero
предпоследний - LPDWORD lpNumberOfBytesWritten
на c# -тип out uint
...
Рейтинг: 0 / 0
Запись файла
    #39929969
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше использовать SafeHandle или FileHandle, а не IntPtr
...
Рейтинг: 0 / 0
Запись файла
    #39929975
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
2. Зачем WinAPI?

Вот меня тоже люто заинтриговал этот вопрос.
...
Рейтинг: 0 / 0
Запись файла
    #39929978
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
лучше использовать SafeHandle или FileHandle, а не IntPtr

до этого "лучше" ещё дожить нужно ))
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]