2 / 2 / 1
Регистрация: 26.06.2010
Сообщений: 37
1

Чтение с консоли и запись в файл средствами API

20.07.2011, 08:07. Показов 5118. Ответов 5
Метки нет (Все метки)

Нужно считать с консоли строку и записать ее в файл средствами WIN API (функции readfile, writefile)

Вот так сделал на обычном С
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(){
    char str[80];
    FILE* file;
    scanf("%s", str);
    file = fopen("C:/test/test.txt", "w");
    fprintf(file, "%s", str);
    fclose(file);
    
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2011, 08:07
Ответы с готовыми решениями:

Чтение и запись с консоли
int w = { 1, 2, 3, 4, 5, 6, 7 }; var message = string.Format(&quot;Init {0} {1} {2}&quot;, 20,...

Чтение и запись в консоли
Здравствуйте, могли бы вы подсказать как данное сделать? Мне нужно записать в консоль данные...

Чтение с консоли, запись в ArrayList
Доброго времени суток! Кто-нибудь подскажет, чем public static void main(String args) throws...

Запись и чтение из файла в консоли
Помогите пожалуйста!!!!! Я не могу записать массив из консоли в файл а потом прочитать(...

5
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
20.07.2011, 08:21 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main() {
    char str[80];
    scanf("%s", str);
    HANDLE file;
    DWORD RW;
    file = CreateFileA ( "C:\\test\\test.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
    if (file == INVALID_HANDLE_VALUE)
       return 1;
    WriteFile ( file, str, strlen(str), &RW, NULL);
    CloseHandle (file);
        return 0;
}
Вот средствами WinApi запись в файл
0
Заблокирован
Автор FAQ
20.07.2011, 08:36 3
К посту An1ka, могу добавить лишь что для WriteFile необходимо подключение
winbase.h но лучше windows.h...

Можно также ввести проверку корректности записи в файл
C++
1
2
    if(!WriteFile(file, str, strlen(str), &RW, NULL))
        printf("Writing error : %s\r\n",strerror(GetLastError()));
0
933 / 758 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
20.07.2011, 08:52 4
Цитата Сообщение от Jino_ Посмотреть сообщение
WIN API чтение с консоли и запись в файл
Значить полностью нужен только WinAPI, даже чтение с консоли, вот ниже начиркал чтение с консоли максимум до 255 символов в строке далее записать в файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <windows.h>
 
 
int main(void) {
 
  HANDLE hin  = GetStdHandle(STD_INPUT_HANDLE);
 
  TCHAR  buf[255];
  DWORD  dr = 0U;
 
  if(ReadConsole(hin, buf, sizeof(buf), &dr, NULL)) {
        FlushConsoleInputBuffer(hin);
 
        buf[dr - 2]  = '\0';
        HANDLE  fp = CreateFile("C:\\tmp.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
                                  CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
 
        if(fp != INVALID_HANDLE_VALUE) {
                WriteFile(fp, buf, lstrlen(buf), &dr, NULL);
                FlushFileBuffers(fp);
                CloseHandle(fp);
        }
 
  }
  Sleep(1000);
 
  return 0;
}
1
Заблокирован
Автор FAQ
20.07.2011, 09:29 5
Ну и чтоб уже не привязываться к константному значению величины буффера и вводить текст любой длинны код можно моджернизировать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <windows.h>
 
char * get_text(char * str, int &sLen, char ch_end);
char * str = (char *)malloc(sizeof(char));
 
int main() 
{
    int sLen;
    str = get_text(str, sLen, '\n');
    HANDLE file = CreateFile 
        ( 
            "C:\\test\\test.txt", 
            GENERIC_WRITE, 
            FILE_SHARE_WRITE, 
            NULL, 
            CREATE_ALWAYS, 
            FILE_ATTRIBUTE_NORMAL, 
            NULL
        );
    if (file == INVALID_HANDLE_VALUE)
        return 1;
    DWORD RW;
    if(!WriteFile(file, str, strlen(str), &RW, NULL))
        printf("Writing error : %s\r\n",strerror(GetLastError()));
    CloseHandle (file);
    return 0;
}
 
char * get_text(char * str, int &sLen, char ch_end)
{
    if(str)
    {
        sLen = 0;
        while((str[sLen] = getchar()) != ch_end)
            str = (char *)realloc(str,(1 + (sLen = sLen + 1))*sizeof(char));
        str[sLen] = '\0';
    }
    return str;
}
1
2 / 2 / 1
Регистрация: 26.06.2010
Сообщений: 37
20.07.2011, 19:12  [ТС] 6
Использую код, написанный xAtom'ом
в результате получаю
'CreateFileW' : cannot convert parameter 1 from 'const char [17]' to 'LPCWSTR'
добавил букву L перед строкой пути - все откомпилировалось (какие-то тонкости с использованием Юникода?)

но
в этос коде я получаю неправильную запись в файл
вместо "abcdefgh" получаю "abcd"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2011, 19:12
Помогаю со студенческими работами здесь

Чтение, запись и обработка текстового файла средствами компонента Memo
Выяснить есть в каждой строке файла буквы для слова “month”. Результат поместить в новый файл в...

Как оставить запись на стене группы Вконтакте от лица авторизованного пользователя средствами API VK?
Добрый день, есть ли способ отправить запись на стену группы от лица пользователя. в приложении...

Как закачать файл на FTP средствами API
Привет Подскажите как закачать на FTP, ни как не получается этой функцией или ниже...

Открыть текстовый файл в необходимом режиме (на чтение, на чтение и запись, на добавление)
Открыть текстовый файл в необходимом режиме (на чтение, на чтение и запись, на добавление). (В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru