1

Тема: Дивна поведінка файлів

Працюю з текстовими файлами, що містять словники.
Вирішив створити новий файл із меншим розміром,
скопіювавши в нього невеличку частину старого файлу.
Читаю старий файл у програмі для інтерфейсу wxWidgets таким чином:
перші чотири рядки окремо до окремих змінних,
п'ятий рядок — це решта файлу до іншої змінної.
Старий файл читається нормально,
а новостворений менший файл лише до 4 рядка включно.
Далі видає лише порожнє місце.
IDE Code Blocks, OS Manjaro. З кодом жодних проблем, бо інші старі файли читаються як слід.
Що не так із новоствореним файлом?

2

Re: Дивна поведінка файлів

Ви це зараз серйозно?

3

Re: Дивна поведінка файлів

koala написав:

Ви це зараз серйозно?

Цілком. Щойно створив наново файл, тепер зовсім не читається.
Не розумію, що це за маячня така.

4

Re: Дивна поведінка файлів

Якщо все саме так, як ви описали - значить, або у вас несправний комп'ютер, або десь порушуються закони Всесвіту, і випадково саме на тих двох файлах.
Але насправді досить очевидно, що ви чогось не розумієте. Або того, як працює ваш код, або того, як працює той код, за допомогою якого ви створювали нові файли. І доки ви нам не дасте можливості розібратися в першому або другому (або в обох), нам лишається тільки відправити вас у сервіс ремонтувати комп'ютер.

Подякували: leofun011

5

Re: Дивна поведінка файлів

koala написав:

Якщо все саме так, як ви описали - значить, або у вас несправний комп'ютер, або десь порушуються закони Всесвіту, і випадково саме на тих двох файлах.
Але насправді досить очевидно, що ви чогось не розумієте. Або того, як працює ваш код, або того, як працює той код, за допомогою якого ви створювали нові файли. І доки ви нам не дасте можливості розібратися в першому або другому (або в обох), нам лишається тільки відправити вас у сервіс ремонтувати комп'ютер.

Проблема десь у wxWidgets, бо через звичайну консольну програму С++ все читається добре.
Можливо, wxStreamToTextRedirector знову щось не те робить.

6

Re: Дивна поведінка файлів

У сервіс. Або до телепатів. Тут вам не допоможуть.

7

Re: Дивна поведінка файлів

Ось код. Може, хтось побачить те, чого я не бачу:

void MyApp::load_dict_from_txt_file(wxString& path)
{
    wxFileInputStream* input = new wxFileInputStream(path);
    wxBufferedInputStream* buffered_input =
        new wxBufferedInputStream(*input, 16384);
    wxTextInputStream* text_file =
        new wxTextInputStream(*buffered_input, wxT("\x09"), wxConvUTF8);

    wxArrayString dict_requisites;
    wxStreamToTextRedirector redirect(my_console->terminal);
    for (int i=0; i<4; i++)
    {
        dict_requisites.Add(text_file->ReadLine());
    }

    wxString dict_body;
    while (input->IsOk() && !input->Eof())
    {
        dict_body += text_file->ReadLine() + "\n";
    }
    wxString& ref_dict_name = dict_requisites[0];
    wxString& ref_lang_pair = dict_requisites[1];
    wxString& ref_dict_descr = dict_requisites[2];
    wxString& ref_regex_key = dict_requisites[3];
    wxString& ref_dict_body = dict_body;

    dictionaries.emplace(piecewise_construct,
        forward_as_tuple(ref_dict_name),
        forward_as_tuple(ref_lang_pair,
                        ref_dict_descr,
                        ref_regex_key,
                        ref_dict_body
                        ));

    cout << ref_dict_name << endl;
    cout << ref_lang_pair << endl;
    cout << ref_dict_descr << endl;
    cout << ref_regex_key << endl;
    cout << ref_dict_body << endl;
}

8

Re: Дивна поведінка файлів

Проблема була в ось цьому рядку:

wxBufferedInputStream* buffered_input =
        new wxBufferedInputStream(*input, 16384);

Щойно я його прибрав, усе запрацювало як слід.
Певно, всередині буферу стається якась плутанина.

9

Re: Дивна поведінка файлів

А які саме символи використовуються для нових рядків у різних файлах?

10

Re: Дивна поведінка файлів

koala написав:

А які саме символи використовуються для нових рядків у різних файлах?

Однакові, '\n'. Вони всі були на Лінукс створені.