close
Пространства имён
Варианты
Действия

std::fwide

Материал из cppreference.com
< cpp | io | c
 
 
Библиотека ввода/вывода
Манипуляторы ввода/вывода
Функции print (C++23)
Ввод/вывод в стиле C
Буферы
(устарело в C++98)
Потоки
Абстракции
Файловый ввод/вывод
Ввод/вывод строк
Ввод/вывод массивов
(устарело в C++98)
(устарело в C++98)
(устарело в C++98)
Синхронизированный вывод
Типы
Интерфейс категорий ошибок
(C++11)
 
Ввод/Вывод в стиле C
Типы и объекты
Функции
Доступ к файлам
Прямой ввод/вывод
Неформатированный ввод/вывод
Форматированный ввод
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
Форматированный вывод
Позиционирование файла
Обработка ошибок
Операции с файлами
 
<tbody> </tbody>
Определено в заголовочном файле <cwchar>
int fwide( std::FILE* stream, int mode );

Если mode > 0, пытается сделать stream широкоориентированным. Если mode < 0, пытается сделать stream байт-ориентированным. Если mode == 0, только запрашивается текущая ориентация потока.

Если ориентация потока уже определена (выполнением вывода или более ранним вызовом fwide), эта функция ничего не делает.

Параметры

stream указатель на поток Ввода/Вывода C для изменения или запроса
mode целочисленное значение больше нуля, чтобы задать широкий поток, меньше нуля, чтобы сделать поток узким, или ноль, только чтобы сделать запрос.

Возвращаемое значение

Целое число больше нуля, если поток после этого вызова широкоориентирован, меньше нуля, если поток после этого вызова ориентирован на байты, и ноль, если поток не имеет ориентации.

Пример

Следующий код устанавливает и сбрасывает ориентацию потока.

#include <cstdio>
#include <cstdlib>
#include <cwchar>
#include <iostream>

void show_orientation(int n)
{
    n < 0 ? std::wcout << L"\tузкая ориентация\n" :
    n > 0 ? std::wcout << L"\tширокая ориентация\n" :
            std::wcout << L"\tнет ориентации\n";
}

void try_read(FILE* fp)
{
    if (const int c = std::fgetc(fp); c == EOF)
        std::wcout << L"\tчтение узкого символа не удалось\n";
    else
        std::wcout << L"\tчтение узкого символа '" << static_cast<char>(c) << "'\n";

    if (const wint_t wc = std::fgetwc(fp); wc == WEOF)
        std::wcout << L"\tчтение широкого символа не удалось\n";
    else
        std::wcout << L"\tчтение широкого символа '" << static_cast<wchar_t>(wc) << "'\n";
}

int main()
{
    enum fwide_orientation : int { narrow = -1, query, wide };
    std::setlocale(LC_ALL, "en_US.utf8");

    FILE* fp = std::fopen("main.cpp", "r");
    if (!fp)
    {
        std::wcerr << L"fopen() не удалась\n";
        return EXIT_FAILURE;
    }

    std::wcout << L"1) Вновь открытый поток не имеет ориентации.\n";
    show_orientation(std::fwide(fp, fwide_orientation::query));

    std::wcout << L"2) Устанавливает байтовую ориентацию.\n";
    show_orientation(std::fwide(fp, fwide_orientation::narrow));
    try_read(fp);

    std::wcout << L"3) Только freopen() может сбросить ориентацию потока.\n";
    if (std::freopen("main.cpp", "r", fp) == NULL)
    {
        std::wcerr << L"freopen() не удалась\n";
        return EXIT_FAILURE;
    }

    std::wcout << L"4) Вновь открытый поток не имеет ориентации.\n";
    show_orientation(std::fwide(fp, fwide_orientation::query));

    std::wcout << L"5) Устанавливает широкую ориентацию.\n";
    show_orientation(std::fwide(fp, fwide_orientation::wide));
    try_read(fp);

    std::fclose(fp);
}

Возможный вывод:

1) Вновь открытый поток не имеет ориентации.
        нет ориентации
2) Устанавливает байтовую ориентацию.
        узкая ориентация
        чтение узкого символа '#'
        чтение широкого символа не удалось
3) Только freopen() может сбросить ориентацию потока.
4) Вновь открытый поток не имеет ориентации.
        нет ориентации
5) Устанавливает широкую ориентацию.
        широкая ориентация
        чтение узкого символа не удалось
        чтение широкого символа '#'

Смотрите также

открывает файл
Оригинал:
opens a file
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]