diff --git a/src/core/qgspathresolver.cpp b/src/core/qgspathresolver.cpp index d665dd1dc86..e7969154482 100644 --- a/src/core/qgspathresolver.cpp +++ b/src/core/qgspathresolver.cpp @@ -163,7 +163,8 @@ QString QgsPathResolver::writePath( const QString &src ) const return src; } - QFileInfo srcFileInfo( src ); + // Strip "file://" + QFileInfo srcFileInfo( src.startsWith( QStringLiteral( "file://" ) ) ? src.mid( 7 ) : src ); QString srcPath = srcFileInfo.exists() ? srcFileInfo.canonicalFilePath() : src; // if this is a VSIFILE, remove the VSI prefix and append to final result diff --git a/tests/src/core/testqgsproject.cpp b/tests/src/core/testqgsproject.cpp index 7bb8e400a13..81d657554cf 100644 --- a/tests/src/core/testqgsproject.cpp +++ b/tests/src/core/testqgsproject.cpp @@ -41,6 +41,7 @@ class TestQgsProject : public QObject void testProjectUnits(); void variablesChanged(); void testLayerFlags(); + void testLocalFiles(); }; void TestQgsProject::init() @@ -386,6 +387,25 @@ void TestQgsProject::testLayerFlags() QVERIFY( !layer->flags().testFlag( QgsMapLayer::Removable ) ); } +void TestQgsProject::testLocalFiles() +{ + QTemporaryFile f; + QVERIFY( f.open() ); + f.close(); + QgsProject prj; + QFileInfo info( f.fileName() ); + prj.setFileName( f.fileName() ); + prj.write(); + QString shpPath = info.dir().path() + '/' + info.baseName() + ".shp"; + QString layerPath = "file://" + shpPath; + QFile f2( shpPath ); + QVERIFY( f2.open( QFile::ReadWrite ) ); + f2.close(); + QgsPathResolver resolver( f.fileName( ) ); + QCOMPARE( resolver.writePath( layerPath ), QString( "./" + info.baseName() + ".shp" ) ) ; + +} + QGSTEST_MAIN( TestQgsProject ) #include "testqgsproject.moc"