d
dufusШілде 24, 2018, 4:24 Т.Қ.

Копирует пустой файл.

с++, GPX, COPY

У меня копируется пустой файл. Хотя до копирования я его создаю и наполняю содержимым.

Мой код:
void CreateTrack::XmlStreamWriter()
{
    QDate Date = Date.currentDate();
    QString DateString = Date.toString("dd-MM-yy");
    if (QDir(QDir::currentPath()+"/Temp/").exists() == false) {
        QDir().mkpath(QDir::currentPath()+"/Temp/");
    }
    QString NameFile = QDir::currentPath()+"/Temp/Маршр. точки_"+DateString+".gpx";
    QFile file(NameFile);
    if(file.open(QIODevice::WriteOnly | QIODevice::Append))
    {
        QXmlStreamWriter writer( &file );
        writer.setCodec("UTF-8");
        writer.writeStartDocument("1.0",false);
        writer.writeStartElement("gpx");
        writer.writeAttribute(QXmlStreamAttribute("xmlns", "http://www.topografix.com/GPX/1/1"));
        writer.writeAttribute(QXmlStreamAttribute("xmlns:gpxx", "http://www.garmin.com/xmlschemas/GpxExtensions/v3"));
        writer.writeAttribute(QXmlStreamAttribute("xmlns:wptx1", "http://www.garmin.com/xmlschemas/WaypointExtension/v1"));
        writer.writeAttribute(QXmlStreamAttribute("xmlns:gpxtpx", "http://www.garmin.com/xmlschemas/TrackPointExtension/v1"));
        writer.writeAttribute(QXmlStreamAttribute("creator", "GPSMAP 64st"));
        writer.writeAttribute(QXmlStreamAttribute("version", "1.1"));
        writer.writeAttribute(QXmlStreamAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
        writer.writeAttribute(QXmlStreamAttribute("xsi:schemaLocation", "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackStatsExtension/v1 http://www8.garmin.com/xmlschemas/TrackStatsExtension.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"));

            writer.writeStartElement("metadata");
                writer.writeStartElement("link");
                writer.writeAttribute(QXmlStreamAttribute("href", "http://www.garmin.com"));
                    writer.writeTextElement("text","Garmin International");
                writer.writeEndElement();          
                QDateTime DateTime = DateTime.currentDateTime();
                QString DateTimeString = DateTime.toString("yyyy-MM-ddThh:mm:ssZ");
                writer.writeTextElement("time",DateTimeString);
            writer.writeEndElement();

            CreateTrack::XmlStreamWriterElement(writer);

        writer.writeEndElement();
        writer.writeEndDocument();
    }

    bool Garmin = false;

    foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {
        if (!storage.isReadOnly()) {
            QString GPX = "Garmin/GPX";
            if (QDir(storage.rootPath()+GPX).exists() == true) {
                qDebug()<<storage.rootPath()+GPX+"/"+QFileInfo(NameFile).fileName();
                qDebug()<<NameFile;
                QFile::copy(NameFile,storage.rootPath()+GPX+"/"+QFileInfo(NameFile).fileName());
                //QFile::remove(NameFile);
                Garmin = true;
                msgBox.setText("Трек добавлен.");
                msgBox.exec();
                this->close();

            } else {
                //msgBox.setText("Устройство GARMIN не найдено.");
                //msgBox.exec();
            }
        }
    }

    if (Garmin == false) {
        //QFile::remove(NameFile);
        msgBox.setText("Устройство GARMIN не найдено.");
        msgBox.exec();
    }

    return;

}

void CreateTrack::XmlStreamWriterElement(QXmlStreamWriter& writer)
{
    for (int i=1;i<ModelPoint->rowCount();i++) {
        writer.writeStartElement("wpt");
        writer.writeAttribute(QXmlStreamAttribute("lat", ModelPoint->index(i,0).data().toString().replace(",",".")));
        writer.writeAttribute(QXmlStreamAttribute("lon", ModelPoint->index(i,1).data().toString().replace(",",".")));
        QDateTime DateTime = DateTime.currentDateTime();
        QString DateTimeString = DateTime.toString("yyyy-MM-ddThh:mm:ssZ");
        writer.writeTextElement("time", DateTimeString);
        writer.writeTextElement("name", ModelPoint->index(i,2).data().toString());
        writer.writeTextElement("sym", "Flag, Blue");
        writer.writeEndElement();
    }
}
В результате получается файл Маршр. точки_24-07-18.gpx:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="GPSMAP 64st" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackStatsExtension/v1 http://www8.garmin.com/xmlschemas/TrackStatsExtension.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"><metadata><link href="http://www.garmin.com"><text>Garmin International</text></link><time>2018-07-24T13:04:46Z</time></metadata><wpt lat="55.701" lon="37.5572"><time>2018-07-24T13:04:46Z</time><name>photo03 — копия.jpg</name><sym>Flag, Blue</sym></wpt><wpt lat="60.049883" lon="30.352043"><time>2018-07-24T13:04:46Z</time><name>ПРОБА 0</name><sym>Flag, Blue</sym></wpt><wpt lat="60.049913" lon="30.352396"><time>2018-07-24T13:04:46Z</time><name>Проба 1</name><sym>Flag, Blue</sym></wpt><wpt lat="60.05" lon="30.35"><time>2018-07-24T13:04:46Z</time><name>ПРОБА 5555</name><sym>Flag, Blue</sym></wpt></gpx>
А в GARMIN отправляется пустой файл Маршр. точки_24-07-18.gpx


Маршр._точки_24-07-18.gpx
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

1
Evgenii Legotckoi
  • Шілде 24, 2018, 6:28 Т.Қ.
  • (өңделген)

Добрый день!

Не вижу, чтобы вы делали flush() и close() файла по окончанию записи.
Описание метода flush()
Flushes any buffered data to the file. Returns true if successful; otherwise returns false .

что означает, что данные записываются в файл. Полагаю, что ваши данные остаются в буффере, и окончательно не записываются в файл.
добавьте строки
file.flush();
file.close();

После работы XML Writer
Возможно из-за этого и не работает





    Пікірлер

    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
    Кіріңіз немесе Тіркеліңіз
    Ua

    Qt - Тест 001. Сигналы и слоты

    • Нәтиже:84ұпай,
    • Бағалау ұпайлары4
    Ua

    Qt - Тест 001. Сигналы и слоты

    • Нәтиже:42ұпай,
    • Бағалау ұпайлары-8
    ОК

    Qt - Тест 001. Сигналы и слоты

    • Нәтиже:47ұпай,
    • Бағалау ұпайлары-6
    Соңғы пікірлер
    ИМ
    Игорь МаксимовҚар. 22, 2024, 9:51 Т.Қ.
    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii LegotckoiҚаз. 31, 2024, 11:37 Т.Қ.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZEҚаз. 19, 2024, 5:19 Т.Қ.
    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь МаксимовҚаз. 5, 2024, 4:51 Т.Қ.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas5Шілде 5, 2024, 8:02 Т.Қ.
    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Енді форумда талқылаңыз
    f
    firstlunoxodАқп. 15, 2025, 1:46 Т.Қ.
    Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
    Дмитрий
    ДмитрийАқп. 3, 2025, 4:24 Т.Қ.
    Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
    NW
    Nayo WaiҚаң. 30, 2025, 7:22 Т.Қ.
    не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
    n
    nklyҚаң. 3, 2025, 12:52 Т.Қ.
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
    M
    MarselТам. 17, 2023, 12:26 Т.Ж.
    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

    Бізді әлеуметтік желілерде бақылаңыз