d
dufusШілде 24, 2018, 6: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, 8:28 Т.Ж.
  • (өңделген)

Добрый день!

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

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

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





    Пікірлер

    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
    Кіріңіз немесе Тіркеліңіз
    OI
    • Ora Iro
    • Жел. 24, 2024, 6:38 Т.Ж.

    C++ - Тест 001. Первая программа и типы данных

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

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Нәтиже:50ұпай,
    • Бағалау ұпайлары-4
    m
    • molni99
    • Қаз. 26, 2024, 1:37 Т.Ж.

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Нәтиже:80ұпай,
    • Бағалау ұпайлары4
    Соңғы пікірлер
    ИМ
    Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas5Шілде 5, 2024, 11:02 Т.Ж.
    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Енді форумда талқылаңыз
    WD
    Weave DecorЖел. 28, 2024, 3:18 Т.Ж.
    Weave & Decor Weave Decor Where passion for textiles meets innovative design. We specialize in manufacturing a diverse range of high-quality bed sheets, from classic to contemporary, using premium fa…
    n
    nklyЖел. 27, 2024, 11:41 Т.Ж.
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. У меня есть Представление QTreeView и древовидная модель QStandardItemModel подключенная к представлению. Итемы в модели QStandardItem. В разных ветках дерева могут быть элементы с одинаковым им…
    Evgenii Legotckoi
    Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
    t
    tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
    NSProject
    NSProjectМаусым 4, 2022, 3:49 Т.Ж.
    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

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