Merge pull request #1243 from ispyisail/fix/element-long-paths

Fix symbols in deep folders on Windows (paths of 260+ characters)
This commit is contained in:
Laurent Trinques
2026-10-02 13:13:33 +02:00
committed by GitHub
5 changed files with 156 additions and 3 deletions
@@ -709,12 +709,20 @@ pugi::xml_document ElementsLocation::pugiXml() const
#endif
if (!m_project)
{
//Read through QFile, not pugi's load_file(): on Windows load_file()
//fails once the full path reaches MAX_PATH (260 characters), while
//QFile handles long paths.
QFile file(m_file_system_path);
if (!file.open(QIODevice::ReadOnly)) {
return docu;
}
const QByteArray data = file.readAll();
#ifndef Q_OS_LINUX
if (docu.load_file(m_file_system_path.toStdWString().c_str())) {
if (docu.load_buffer(data.constData(), data.size())) {
docu.save(m_string_stream);
}
#else
docu.load_file(m_file_system_path.toStdWString().c_str());
docu.load_buffer(data.constData(), data.size());
#endif
}
else
@@ -24,6 +24,7 @@
#include <QApplication>
#include <QDir>
#include <QFile>
#include <QPainter>
#include <QPixmap>
#include <QStyle>
@@ -178,7 +179,12 @@ QString FileElementCollectionItem::localName()
bool readable = false;
QString str(fileSystemPath() % "/qet_directory");
pugi::xml_document docu;
if (docu.load_file(str.toStdWString().c_str()))
// QFile rather than pugi's load_file(), which fails on
// Windows once the full path reaches 260 characters.
QFile file(str);
const QByteArray data = file.open(QIODevice::ReadOnly)
? file.readAll() : QByteArray();
if (!data.isEmpty() && docu.load_buffer(data.constData(), data.size()))
{
if (QString(docu.document_element().name())
== "qet-directory")