在C中使用’boost :: system :: error_code’

前端之家收集整理的这篇文章主要介绍了在C中使用’boost :: system :: error_code’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码
boost::system::error_code errcode;
return (boost::filesystem::create_directories(widePath,errcode));

当出现问题时,我认为errcode会指出错误的性质.但是,我发现当我知道有问题出现时,errcode保持0,这是没有帮助的.

我也尝试打印错误代码,看看它是否会显示不同的东西:

boost::system::error_code errcode;
boost::filesystem::create_directories(widePath,errcode);

if (errcode == 0)
    return true;
else
{
    std::cout << errcode;       
    return false;
}

通过在文件名称“widPath”中引入无效字符(???),我故意造成错误.现在我回到系统:123结果.这意味着什么?

解决方法

只需访问: http://www.boost.org/doc/libs/1_55_0/libs/system/doc/reference.html#Header-error_code
enum errc_t {
    success = 0,address_family_not_supported,//EAFNOSUPPORT
    address_in_use,//EADDRINUSE
    address_not_available,//EADDRNOTAVAIL
    already_connected,//EISCONN
    argument_list_too_long,//E2BIG
    argument_out_of_domain,//EDOM
    bad_address,//EFAULT
    bad_file_descriptor,//EBADF
    bad_message,//EBADMSG
    broken_pipe,//EPIPE
    connection_aborted,//ECONNABORTED
    connection_already_in_progress,//EALREADY
    connection_refused,//ECONNREFUSED
    connection_reset,//ECONNRESET
    cross_device_link,//EXDEV
    destination_address_required,//EDESTADDRREQ
    device_or_resource_busy,//EBUSY
    directory_not_empty,//ENOTEMPTY
    executable_format_error,//ENOEXEC
    file_exists,//EEXIST
    file_too_large,//EFBIG
    filename_too_long,//ENAMETOOLONG
    function_not_supported,//ENOSYS
    host_unreachable,//EHOSTUNREACH
    identifier_removed,//EIDRM
    illegal_byte_sequence,//EILSEQ
    inappropriate_io_control_operation,//ENOTTY
    interrupted,//EINTR
    invalid_argument,//EINVAL
    invalid_seek,//ESPIPE
    io_error,//EIO
    is_a_directory,//EISDIR
    message_size,//EMSGSIZE
    network_down,//ENETDOWN
    network_reset,//ENETRESET
    network_unreachable,//ENETUNREACH
    no_buffer_space,//ENOBUFS
    no_child_process,//ECHILD
    no_link,//ENOLINK
    no_lock_available,//ENOLCK
    no_message_available,//ENODATA
    no_message,//ENOMSG
    no_protocol_option,//ENOPROTOOPT
    no_space_on_device,//ENOSPC
    no_stream_resources,//ENOSR
    no_such_device_or_address,//ENXIO
    no_such_device,//ENODEV
    no_such_file_or_directory,//ENOENT
    no_such_process,//ESRCH
    not_a_directory,//ENOTDIR
    not_a_socket,//ENOTSOCK
    not_a_stream,//ENOSTR
    not_connected,//ENOTCONN
    not_enough_memory,//ENOMEM
    not_supported,//ENOTSUP
    operation_canceled,//ECANCELED
    operation_in_progress,//EINPROGRESS
    operation_not_permitted,//EPERM
    operation_not_supported,//EOPNOTSUPP
    operation_would_block,//EWOULDBLOCK
    owner_dead,//EOWNERDEAD
    permission_denied,//EACCES
    protocol_error,//EPROTO
    protocol_not_supported,//EPROTONOSUPPORT
    read_only_file_system,//EROFS
    resource_deadlock_would_occur,//EDEADLK
    resource_unavailable_try_again,//EAGAIN
    result_out_of_range,//ERANGE
    state_not_recoverable,//ENOTRECOVERABLE
    stream_timeout,//ETIME
    text_file_busy,//ETXTBSY
    timed_out,//ETIMEDOUT
    too_many_files_open_in_system,//ENFILE
    too_many_files_open,//EMFILE
    too_many_links,//EMLINK
    too_many_synbolic_link_levels,//ELOOP
    value_too_large,//EOVERFLOW
    wrong_protocol_type             //EPROTOTYPE
};

此外:

switch( errcode.value() ) {
    case boost::system::errc::success: {
        // fine
    }
    break;

    case boost::system::errc::operation_canceled: {
        // Timer cancelled
    }
    break;

    default: {
        // Assert unexpected case
    }
    break;
}

猜你在找的C&C++相关文章