Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 37
1

Файл: Считать данные из текстового файла и записать их в другой файл, заданный пользователем...

19.01.2019, 20:28. Просмотров 758. Ответов 3
Метки нет (Все метки)


Доброго времени суток. Выполняя задание по программированию столкнулся с проблемой. Необходимо считать данный из текстового файла(кириллица, латиница и цифры) и записать их в другой файл, выбранный пользователем. Со считыванием файл в массив я вроде разобрался, а вот с записью возникла проблема. В файл записываются что-то совсем не то. Вместо записи содержимого первого файла идет постоянная запись каких-то непонятных мне символов.


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include "tchar.h"
#include <stdio.h>
#include <locale.h>
#include <conio.h>
 
bool Open_TXT(HANDLE File, char a[]);
bool Save_TXT(HANDLE File, char a[]);
 
bool Open_TXT(HANDLE File, char a[])
{
    OPENFILENAME ofn;
    TCHAR size[100];
    wchar_t nameFile[260] = { 0 };
    unsigned long  file_size = 0;
    bool result = FALSE;
    DWORD buf = 0;
    bool res = FALSE;
    char sim;
    int i = 0;
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = size;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(size);
    ofn.lpstrFilter = TEXT("All\0*.*\0Text\0*.TXT\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = nameFile;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = NULL;
    result = GetOpenFileName(&ofn);
    file_size = GetFileSize(ofn.lpstrFile, NULL);
    if (!result)
    {
    
        std::cout << "Файл не выбран" << std::endl << "-----------------------" << std::endl;
        return FALSE;
    }
    else
    {
        File = CreateFile(ofn.lpstrFile, GENERIC_READ|| GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        std::cout << "Файл открыт" << std::endl << "-----------------------"  << std::endl;
        do
        {
            res = ReadFile(File, &sim, sizeof(sim), &buf, NULL);
            a[i] = sim;
            std::cout << a[i]<< std::endl << "-----------------------" << std::endl;
            if (buf == 0)break;     
        }
        while (buf!=0);
        i = 0;
        return TRUE;
    }
}
 
bool Save_TXT(HANDLE File, char a[])
{
    OPENFILENAME ofn;
    TCHAR size[100];
    wchar_t nameFile[260] = { 0 };
    unsigned long  file_size = 0;
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = size;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(size);
    ofn.lpstrFilter = TEXT("All\0*.*\0Text\0*.TXT\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    bool result=GetSaveFileName(&ofn);
    if (!result)
    {
        std::cout << "Ошибка" << std::endl << "-----------------------" << std::endl;
        return FALSE;
    }
    else
    {
        File = CreateFile(ofn.lpstrFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        char sim;
        bool res = FALSE;
        DWORD buf = 0;
        int i = 0;
        do
        {
            sim = a[i];
            res=WriteFile(File, &sim, sizeof(sim), &buf, NULL);
            i++;
        } while (buf != 0);
        i = 0;
        std::cout << "Файл сохранен" << std::endl << "-----------------------" << std::endl;
        return TRUE;
    }
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    HANDLE File = NULL;
    char *a = new char[25];
    bool res= Open_TXT(File,a);
    CloseHandle(File);
    bool save=Save_TXT(File,a);
    CloseHandle(File);
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2019, 20:28
Ответы с готовыми решениями:

Считать данные из текстового файла по условию и записать их в другой текстовый файл (файловый ввод/вывод)
Здравствуйте! Очень прошу о помощи! Суть задания - дан текстовый файл, нужно считать его и записать...

Считать данные из файла, записать в другой файл
string INPUT = @&quot;D:\input.txt&quot;; string OUTPUT = @&quot;D:\output.txt&quot;; ...

Из текстового файла считать вторую строку и последнюю. Записать их в другой текстовой файл
Из текстового файла считать вторую строку и последнюю. Записать их в другой текстовой файл. Прошу...

Как прочесть данные с текстового файла и записать их в другой текстовый файл
Добрый день всем, есть одна задача которая на половину работает не коректно. А именно надо прочесть...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
3
Maniac
Эксперт С++
1454 / 955 / 159
Регистрация: 02.01.2009
Сообщений: 2,815
Записей в блоге: 1
21.01.2019, 00:55 2
Цитата Сообщение от 1u5t1se Посмотреть сообщение
WriteFile(File, &sim, sizeof(sim), &buf, NULL);
&sim - вместо данных пишешь начало адреса переменой sim.
&buf - сюда будет писаться количество записных байт в файл, тоесть цикл while (buf != 0); будет вечен пока приложение не умрет от ошибки.

переделай както так (без цикла)

C++
1
2
3
4
5
6
7
8
9
bool Save_TXT(HANDLE File, char *a, unsigned buffsize){
....
WriteFile(File, a, buffsize, &buf, NULL);
 
...
char *a = new char[25];
bool res= Open_TXT(File,a);
CloseHandle(File);
bool save=Save_TXT(File,a, 25);
ну и с чтением файла, както опасно ты его читаешь в ограниченный буфер.
0
576 / 387 / 145
Регистрация: 11.01.2019
Сообщений: 1,627
21.01.2019, 22:52 3
Ну ты б сперва поглядел примеры использования функции записи...

C++
1
2
3
4
5
6
WriteFile( 
                    hFile,           // open file handle
                    DataBuffer,      // start of data to write
                    dwBytesToWrite,  // number of bytes to write
                    &dwBytesWritten, // number of bytes that were written
                    NULL);            // no overlapped structure
0
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 37
22.01.2019, 19:15  [ТС] 4
Спасибо всем за помощь, но уже не нужно. Сам разобрался, все работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2019, 19:15

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Файл: Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив
Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив

Из текстового файла считать матрицу и записать ее в бинарный файл
Прошу помочь с решением: Из текстового файла считать матрицу и записать ее в бинарный файл ...

Считать слова из одного текстового файла в другой текстовый файл
2.Написать программу, которая считывает слова из одного текстового файла и записывает их в столбик...

Файл: Необходимо считать данные из текстового файла в массив.
Доброго времени суток. Задача следующая: необходимо считать одномерный массив из текстового файла....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.