Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <stdio.h>
- #include <cstdio>
- #include <cstring>
- #include <io.h>
- #include <cstdlib>
- #include <clocale>
- const int MAX_LIMIT = 10000;
- BOOL FileExists(LPCSTR path)
- {
- return (_access(path, 0) == 0);
- }
- int main (int argc, char * argv[]) {
- setlocale(0, "");
- HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- // Выделяем память с помощью функции HeapAlloc
- LPSTR errorMsg = (char*)HeapAlloc(GetProcessHeap(), 0, MAX_LIMIT);
- DWORD written = 0;
- // Проверка количества аргументов. В случае если аргументов меньше, выводим сообщение
- // и завершаем программу
- if (argc < 3) {
- errorMsg = (LPSTR)"Usage: writefile.exe [buffer size] [filename]";
- WriteConsoleA(stdOut, errorMsg, strlen(errorMsg), &written, NULL);
- return -1;
- }
- // Конвертируем первый аргумент в целое число
- int bufferSize = atoi(argv[1]);
- // Если аргумент некорректный, выводим ошибку и завершаем программу
- if (bufferSize == 0) {
- errorMsg = (LPSTR)"Error: incorrect buffer size argument!";
- WriteConsoleA(stdOut, errorMsg, strlen(errorMsg), &written, NULL);
- return -1;
- }
- LPSTR filename = argv[2];
- if (FileExists(filename)) {
- sprintf(errorMsg, "Error: file %s is already exists!", filename);
- WriteConsoleA(stdOut, errorMsg, strlen(errorMsg), &written, NULL);
- return -1;
- }
- char input[MAX_LIMIT];
- WriteConsoleA(stdOut, "Input text: ", 12, &written, NULL);
- ReadConsole(GetStdHandle(STD_INPUT_HANDLE), input, MAX_LIMIT, &written, NULL);
- // Получаем длину введенного текста
- int lenInput = strlen(input);
- // Если размер буфера данного в качестве аргумента больше длины введенной строки
- // Присваиваем длине буфера длину строки
- bufferSize = (bufferSize > lenInput) ? lenInput : bufferSize;
- HANDLE hFile = CreateFileA(filename, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (hFile == INVALID_HANDLE_VALUE) {
- LPSTR errorText;
- DWORD errorTextLen = FormatMessageA(
- FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
- (LPSTR)&errorText,
- 0,
- NULL
- );
- sprintf(errorMsg, "Error while opening file: %s", errorText);
- WriteConsoleA(stdOut, errorMsg, strlen(errorMsg), &written, NULL);
- HeapFree(GetProcessHeap(), 0, errorText);
- return -1;
- }
- DWORD bytesWritten = 0;
- if (!WriteFile(hFile, input, bufferSize, &bytesWritten, NULL)) {
- LPSTR errorText;
- DWORD errorTextLen = FormatMessage(
- FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
- (LPSTR)&errorText,
- 0,
- NULL
- );
- sprintf(errorMsg, "Error while opening file: %s", errorText);
- WriteConsoleA(stdOut, errorMsg, strlen(errorMsg), &written, NULL);
- HeapFree(GetProcessHeap(), 0, errorText);
- return -1;
- }
- HeapFree(GetProcessHeap(), 0, errorMsg);
- CloseHandle (hFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement