Форум программистов, компьютерный форум CyberForum.ru

Работа с файлайми - C++

Восстановить пароль Регистрация
 
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
26.05.2013, 20:02     Работа с файлайми #1
Всем доброго времени суток. Копаю С++ дальше есть вопросик по поводу работы с файлами я работаю с файловым текстовым потоком.
C++
1
2
3
4
5
6
7
8
FILE* myFile;
    myFile = fopen("test2.txt", "at+");
    for(int i = 1; i < 100; i++)
    {
        str = "TEST\n";
        
        fwrite(&str, sizeof(string), 1, myFile);
    }
все ок пишется в файл но не совсем вот то что они пишет в файл.
Кликните здесь для просмотра всего текста
ØÌKTEST
ØÌKTEST
ØÌKTEST
ØÌKTEST
ØÌKTEST


Почему он начал добавлять пустые знаки? Заранее спасибо за помощь.

Добавлено через 16 минут
хотя бы подскажите где я накосячил)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 20:02     Работа с файлайми
Посмотрите здесь:

C++ Работа со структурами, работа с векторами.
C++ Работа с битами И Работа с символьными данными

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
26.05.2013, 21:17     Работа с файлайми #2
sizeof(string) - так не нужно делать тут. Ты ведь текст пишешь в файл. Тебе надо длину строки в символах вычислить.
size() - вто что можно использовать для этого.

Поправил твой вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
 
using namespace std;
 
int main() {
 
    FILE* myFile;
    myFile = fopen( "test2.txt", "at+" );
 
    for ( int i = 1; i < 100; i++ ) {
        string str = "TEST\n";
 
        fwrite( str.c_str(), str.size(), 1, myFile );
 
    }
 
    fclose( myFile );
 
    return 0;
}
Но если уж ты работаешь с языком C++, то предпочтительней, я думаю, использовать не функции СИ, а именно функциональность C++ - ifstream или ofstream с их методами работы с файлами.

Ниже привел твой пример для СИ, в котором нету типа string.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void) {
    FILE* myFile;
    myFile = fopen( "test2.txt", "at+" );
 
    int i;
    for ( i = 1; i < 100; i++ ) {
        // первый вариант
        // char str[] = "TEST\n";
        // fwrite( str, strlen(str), 1, myFile );
 
 
        // второй вариант
         const char str[] = "TEST\n";
         fprintf( myFile, str );
 
    }
 
    fclose( myFile );
    return EXIT_SUCCESS;
}
Добавлено через 7 минут
Цитата Сообщение от UranFlex Посмотреть сообщение
Но если уж ты работаешь с языком C++, то предпочтительней, я думаю, использовать не функции СИ, а именно функциональность C++ - ifstream или ofstream с их методами работы с файлами.
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
 
using namespace std;
 
int main() {
    ofstream outFile( "text", fstream::app );
    string str( "TEST" );
 
    for( int i = 1; i < 100; ++i )
        outFile << str << "\n";
 
    outFile.close();
 
    return 0;
}
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
27.05.2013, 00:00  [ТС]     Работа с файлайми #3
Буду пробовать)Спасибо

Добавлено через 1 час 57 минут
еще вопросик пишу в файл через ofstream. английский текст он записывает отлично, а вот русский не очень. как его лучше записать?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2013, 00:05     Работа с файлайми #4
Цитата Сообщение от Auron Посмотреть сообщение
а вот русский не очень.
Русские шрифты в консоли
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
27.05.2013, 00:08  [ТС]     Работа с файлайми #5
Цитата Сообщение от kazak Посмотреть сообщение
я не про это в консоли я русский текст вывожу так
C++
1
setlocale(LC_ALL, "rus");
я имел ввиду что если я записываю русский текст то в файле абракадабра записалась, а не слова
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2013, 00:11     Работа с файлайми #6
Цитата Сообщение от Auron Посмотреть сообщение
я не про это в консоли я русский текст вывожу так
Это не правильный метод, он для этого вообще не предназначен.
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
27.05.2013, 00:18  [ТС]     Работа с файлайми #7
Цитата Сообщение от kazak Посмотреть сообщение
Это не правильный метод, он для этого вообще не предназначен.
почему не правильный и не предназначен?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
27.05.2013, 00:20     Работа с файлайми #8
Я бы так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
 
int main()
{
FILE* myFile;
    char* str;
    myFile = fopen("test2.txt", "at+");
    for(int i = 1; i < 100; i++)
    {
        str = (char*)"TEST\n";
        
        fwrite(str, strlen(str), 1, myFile);
    }
    fclose(myFile);
    return 0;
}
что такое "at+" (t меня интересует), я так и не понял
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2013, 00:29     Работа с файлайми #9
Auron, setlocale устанавливает национальные настройки такие как: формат дата/время, десятичный разделитель, валюта, разделитель тысяч и тому подобное. То что он меняет кодовую страницу для устройства вывода (и только!) - побочный продукт некоторых компиляторов.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2013, 00:43     Работа с файлайми #10
Цитата Сообщение от Auron Посмотреть сообщение
еще вопросик пишу в файл через ofstream. английский текст он записывает отлично, а вот русский не очень. как его лучше записать?
Код покажите. Тут не сама запись в файл важна, а то, как русский текст попадает в записываемое (в строку).

Добавлено через 2 минуты
Цитата Сообщение от kravam Посмотреть сообщение
что такое "at+" (t меня интересует), я так и не понял
Подсказка, что в текстовом режиме.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
27.05.2013, 00:47     Работа с файлайми #11
Так он вроде и так текстовый, по умолчанию-то
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2013, 00:55     Работа с файлайми #12
Цитата Сообщение от kravam Посмотреть сообщение
Так он вроде и так текстовый, по умолчанию-то
Синтаксис такой. Можно так: a+, а можно так: at+. Одно и тоже.
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
27.05.2013, 00:56  [ТС]     Работа с файлайми #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Код покажите. Тут не сама запись в файл важна, а то, как русский текст попадает в записываемое (в строку).

Добавлено через 2 минуты

Подсказка, что в текстовом режиме.
вот код
C++
1
2
3
4
5
6
7
8
9
ofstream my_file("test.txt", fstream::app );
    string str;
 
    cout << my_text ;
    getline(cin, str);
 
    my_file <<" "<<str;
 
    my_file.close();
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
27.05.2013, 01:02     Работа с файлайми #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<fstream>
#include <windows.h>
using namespace std;
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 
ofstream my_file("test.txt", fstream::app );
    string str;
 
    getline(cin, str);
 
    my_file <<" "<<str;
 
    my_file.close();    return 0;
}
или:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
 
 
ofstream my_file("test.txt", fstream::app );
    string str;
 
    getline(cin, str);
 
    my_file <<" "<<str;
 
    my_file.close();    return 0;
}
в этом случае в файле будет русский текст в кодировке MSDOS (в первом случае русский текст в кодировке ANSI)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2013, 01:02     Работа с файлайми #15
Нужно русский ввод в консоли сделать:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
Yandex
Объявления
27.05.2013, 01:02     Работа с файлайми
Ответ Создать тему
Опции темы

Текущее время: 13:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru