© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
24 июля 2018 г. 10: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


Добрый день!

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

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

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





Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
15 августа 2018 г. 19:02
Lord Inquisitoris

C++ - Тест 003. Условия и циклы

  • Результат 57баллов,
  • Очки рейтинга-2
15 августа 2018 г. 18:58
Lord Inquisitoris

C++ - Тест 005. Структуры и Классы

  • Результат 83баллов,
  • Очки рейтинга4
15 августа 2018 г. 9:29
Леха Завистович

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

  • Результат 86баллов,
  • Очки рейтинга6
Последние комментарии
10 августа 2018 г. 13:40
Alex

Работа с триггерными функциями в PostgreSQL

Приветствую! Если вы создаете новую таблицу, почему бы просто не сделать вьюху ? Просто от одного названия "триггер" как-то не хочется его использовать, а уж кода сколько писа...
10 августа 2018 г. 11:46
Евгений Легоцкой

Bash скрипт для создания и скачивания дампа базы данных и медиа файлов с удаленного сервера

Вон оно что. Не сталкивался с таким, надо будет глянуть исходники дефолтного менеджера объектов. Возможно там кеширование просто. Пробовали добавить запись через adminer, перезапусти...
10 августа 2018 г. 11:34
Alex

Bash скрипт для создания и скачивания дампа базы данных и медиа файлов с удаленного сервера

допустим у нас есть любая таблица, созданная джангой. через админку добавляем пару записей. все ок. далее, лично в моем случае , я открываю adminer, и в эту таблицу добавляю еще одну зап...
Сейчас обсуждают на форуме
15 августа 2018 г. 14:06
Олег Корнев

Как подключить QtCharts в QML?

После некоторых манипуляций (переустановил креатор) смог запустить экземплы с использованием QtCharts, но все они работают с подключениями в файлах .pro .cpp, у меня таких файлов нет. Как...
14 августа 2018 г. 7:02
Ruslan-maniak

Переключение страниц и перевод фокуса на потомка новой страницы

Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.fo...
14 августа 2018 г. 6:39
Евгений Легоцкой

Как сделать аудиовизуализацию для плеера на qt?

Добрый день. Просмотрите пример в Qt Creator, который на QML, там реализовано визуализация, возможно вам понравится использовать, QML, да и кастомные интерфейсы на нём всё-таки лучше...
11 августа 2018 г. 10:12
Евгений Легоцкой

Qt C++ vs QML

Добрый день. Если Андроид предполагается, то конечно нужно использовать QML. Я занимался разработкой арканоида на QML и ещё одной игры. Пытался реализовывать логику на QML, но это ...
11 августа 2018 г. 9:24
Евгений Легоцкой

Помогите со слоями

Проверочное сообщение

Рекомендуемые страницы