diff --git a/cpp/src/arrow/io/file.cc b/cpp/src/arrow/io/file.cc index 0abadbb16af41..9db2fddba8d9e 100644 --- a/cpp/src/arrow/io/file.cc +++ b/cpp/src/arrow/io/file.cc @@ -580,13 +580,21 @@ MemoryMappedFile::~MemoryMappedFile() {} Status MemoryMappedFile::Create(const std::string& path, int64_t size, std::shared_ptr* out) { + int ret; std::shared_ptr file; RETURN_NOT_OK(FileOutputStream::Open(path, &file)); #ifdef _MSC_VER - _chsize_s(file->file_descriptor(), static_cast(size)); + ret = _chsize_s(file->file_descriptor(), static_cast(size)); #else - ftruncate(file->file_descriptor(), static_cast(size)); + ret = ftruncate(file->file_descriptor(), static_cast(size)); #endif + + if (ret != 0) { + std::stringstream ss; + ss << "Unable to create file, error: " << std::strerror(errno); + return Status::IOError(ss.str()); + } + RETURN_NOT_OK(file->Close()); return MemoryMappedFile::Open(path, FileMode::READWRITE, out); }