6
6
#include < QFile>
7
7
#include < QDebug>
8
8
#include < QFileInfo>
9
+ #include < QDir>
9
10
10
11
DltFileExporter::DltFileExporter (const QDltFile& input) : m_input(input) {}
11
12
@@ -23,22 +24,40 @@ void DltFileExporter::setMaxOutputSize(std::size_t sz)
23
24
void DltFileExporter::exportMessages (const QString& outputName)
24
25
{
25
26
if (m_splitByFilter) {
27
+ const QFileInfo outputInfo (outputName);
28
+ const auto outputDir = outputInfo.absolutePath () + " /" + outputInfo.baseName ();
29
+ if (!QDir (outputDir).exists () && !QDir ().mkpath (outputDir)) {
30
+ qDebug () << " Couldn't create output directory: " << outputDir;
31
+ return ;
32
+ }
26
33
for (const auto & filterFilepath : m_filters) {
27
- QFileInfo info (filterFilepath);
28
34
QDltFilterList filterList;
29
35
if (!filterList.LoadFilter (filterFilepath, true )) {
30
36
qDebug () << " Export: Open filter file " << filterFilepath << " failed!" ;
31
37
continue ;
32
38
}
33
39
34
- QFile file (outputName + " /" + info.baseName () + " .dlt" );
35
- if (!file.open (QIODevice::WriteOnly))
36
- {
37
- qDebug () << " ERROR: Couldn't open output file: " << outputName;
38
- continue ;
39
- }
40
+ const QFileInfo filterInfo (filterFilepath);
41
+
42
+ std::size_t fileCounter = 1 ;
43
+ std::size_t bytesCount = m_maxOutputSize.value_or (0 );
40
44
45
+ QFile output;
41
46
for (int i = 0 ; i < m_input.size (); ++i) {
47
+ if (m_maxOutputSize && (bytesCount >= *m_maxOutputSize)) {
48
+ output.close ();
49
+
50
+ const auto outputName = outputDir + " /" + filterInfo.baseName () + " _" + QString::number (fileCounter) + " .dlt" ;
51
+ output.setFileName (outputName);
52
+ if (!output.open (QIODevice::WriteOnly))
53
+ {
54
+ qDebug () << " ERROR: Couldn't open output file: " << outputName;
55
+ return ;
56
+ }
57
+ bytesCount = 0 ;
58
+ ++fileCounter;
59
+ }
60
+
42
61
QByteArray buf = m_input.getMsg (i);
43
62
if (buf.isEmpty ())
44
63
{
@@ -51,8 +70,10 @@ void DltFileExporter::exportMessages(const QString& outputName)
51
70
bool isApplied = m_input.applyRegExStringMsg (msg);
52
71
if (isApplied) msg.getMsg (buf,true );
53
72
54
- if (filterList.isEmpty () || filterList.checkFilter (msg))
55
- file.write (buf);
73
+ if (filterList.isEmpty () || filterList.checkFilter (msg)) {
74
+ bytesCount += buf.size ();
75
+ output.write (buf);
76
+ }
56
77
}
57
78
}
58
79
} else {
0 commit comments