Browse Source

Simplify implementation

This also enable each platform to provide its own optimal implementation of it.
adaptive-webui-19844
Chocobo1 2 years ago
parent
commit
727d20cc92
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 9
      src/base/path.cpp
  2. 3
      src/base/path.h
  3. 16
      src/base/utils/fs.cpp

9
src/base/path.cpp

@ -218,6 +218,15 @@ QString Path::toString() const @@ -218,6 +218,15 @@ QString Path::toString() const
return QDir::toNativeSeparators(m_pathStr);
}
std::filesystem::path Path::toStdFsPath() const
{
#ifdef Q_OS_WIN
return {data().toStdWString(), std::filesystem::path::format::generic_format};
#else
return {data().toStdString(), std::filesystem::path::format::generic_format};
#endif
}
Path &Path::operator/=(const Path &other)
{
*this = *this / other;

3
src/base/path.h

@ -29,6 +29,8 @@ @@ -29,6 +29,8 @@
#pragma once
#include <filesystem>
#include <QtGlobal>
#include <QMetaType>
#include <QString>
@ -69,6 +71,7 @@ public: @@ -69,6 +71,7 @@ public:
QString data() const;
QString toString() const override;
std::filesystem::path toStdFsPath() const;
Path &operator/=(const Path &other);
Path &operator+=(QStringView str);

16
src/base/utils/fs.cpp

@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
#include <cerrno>
#include <cstring>
#include <filesystem>
#if defined(Q_OS_WIN)
#include <memory>
@ -57,8 +58,8 @@ @@ -57,8 +58,8 @@
#include <QDirIterator>
#include <QFile>
#include <QFileInfo>
#include <QStorageInfo>
#include <QRegularExpression>
#include <QStorageInfo>
#include "base/global.h"
#include "base/path.h"
@ -214,17 +215,8 @@ Path Utils::Fs::tempPath() @@ -214,17 +215,8 @@ Path Utils::Fs::tempPath()
bool Utils::Fs::isRegularFile(const Path &path)
{
struct ::stat st;
if (::stat(path.toString().toUtf8().constData(), &st) != 0)
{
// analyse erno and log the error
const auto err = errno;
qDebug("Could not get file stats for path '%s'. Error: %s"
, qUtf8Printable(path.toString()), strerror(err));
return false;
}
return (st.st_mode & S_IFMT) == S_IFREG;
std::error_code ec;
return std::filesystem::is_regular_file(path.toStdFsPath(), ec);
}
bool Utils::Fs::isNetworkFileSystem(const Path &path)

Loading…
Cancel
Save