Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
d
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


1

Добрый день!

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

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

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





0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
КА
19 февраля 2019 г. 18:32
Кристина Афанасьева

C++ - Тест 006. Перечисления

  • Результат:70баллов,
  • Очки рейтинга1
КА
19 февраля 2019 г. 18:26
Кристина Афанасьева

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

  • Результат:60баллов,
  • Очки рейтинга-1
КА
19 февраля 2019 г. 18:00
Кристина Афанасьева

C++ - Тест 002. Константы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
21 февраля 2019 г. 12:51
Евгений Легоцкой

Иногда CMake приходится перезапускать начисто, не обновляет кэш
R
21 февраля 2019 г. 12:29
RandyGallup

Я указал данные строки, т.к. без них у меня вылетала следующая ошибка: By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configurat...
21 февраля 2019 г. 12:08
BlinCT

Вот атк выглядит мой проектник, посмотрите его. cmake_minimum_required(VERSION 3.6)project(projecttimer)set(CMAKE_CXX_STANDARD 11)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)find_packa...
21 февраля 2019 г. 12:04
BlinCT

Смотрите, если вы используете глобально для проекта -DCMAKE_PREFIX_PATH= то вам не надо уже указывать вот эти строкиset(Qt5Core_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Core")set(Qt5Gui_DIR...
R
21 февраля 2019 г. 11:54
RandyGallup

Даже не запускается. main.cpp у меня точно такой же, как в статье. CMakeLists.txt пришлось немного подправить (прикрепил ниже), т.к. не находились некоторые файлы. cmake_minimum_requi...
Сейчас обсуждают на форуме
21 февраля 2019 г. 8:58
Евгений Легоцкой

Ну у меня координаты передавались в зависимости от положения курсора мыши, а в вам по сути нужно будет аналогичным способом посылать даннные из полей ввода. Так что здесь скорее интерфес...
20 февраля 2019 г. 21:55
Евгений Легоцкой

Не до конца понимаю сути вопроса, наверное, нужно увидеть программный код и попытку его применения, но к методам базового класса можно обращаться в наследованном классе через вызов по имени ба...
MU
20 февраля 2019 г. 15:06
Maciej Urmański

Yes, ok I have solution! Thank you for directing me about annotate.:) Solution is: users_in = User.objects.filter(joined_users__goal=goal, joined_users__joined=True)
20 февраля 2019 г. 14:40
Евгений Легоцкой

Думаю, что ещё можно переопределить mouseReleaseEvent(QMouseEvent* event) у QTableView, который содержит модель и немного поиграться с индексом. Если это индекс, который соответству...
20 февраля 2019 г. 10:34
Евгений Легоцкой

Да, так тоже можно. Единственный момент в том, что lupdate не всегда понимает, к какому контексту это дело относится, и может запихать в левый контекст. В небольшом проекте это не критич...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы