<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Datei &amp;quot;durchscannen&amp;quot; und säubern]]></title><description><![CDATA[<p>Hallo, ich bins mal wieder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich habe mehr oder weniger 2 Probleme bzw. Fragen. Erstmal die Geschichte:</p>
<p>Es handelt sich nicht um normale Textdateien sondern um Dateien mit der Endung &quot;.pt&quot;. Es geht darum, dass ganze File &quot;durchzuscannen&quot; und alle &quot;0x63&quot; Werte rauszulöschen weil sie da drin unnötig sind und die Dateien nur zwecklos grösser machen (sogar ziemlich grösser). Ich habe mir dabei gedacht, dass das Programm erstmal alle Dateien aus dem Ordner und den Unterordnern ausliest den ich angegeben habe (habe ich bereits fertig). Danach erstellt es eine exakte &quot;temporäre&quot; Kopie aller File-Namen mit einer zusätzlichen &quot;.pr&quot; Endung (steht für PRocess). Also wenn jetzt z.B. ein File &quot;<a href="http://12345.pt" rel="nofollow">12345.pt</a>&quot; heisst, wird ein leeres neues File erstellt welches &quot;<a href="http://12345.pt.pr" rel="nofollow">12345.pt.pr</a>&quot; heisst. Selber Name, zusätzliche Endung, kein Inhalt. Soweit sollte ich es noch schaffen. Jetzt zum eigentlichen Probem: Dem Scannen. Ich dachte mir, dass ich das File durchscannen lasse und alle Datentypen die NICHT &quot;0x63&quot; sind in dieses erstellte &quot;.pr&quot;-File speichere. Dies muss fast so sein weil man ja das File während dem scannen schlecht direkt verändern kann und es auch einfacher geht gerade alles was brauchbar ist in ein neues zu speichern. Am Schluss des Prozesses wird die originale &quot;.pt&quot; Datei gelöscht und die neue &quot;.pr&quot; Datei ohne diese &quot;0x63&quot; umbenannt resp. das &quot;.pr&quot; am Schluss weggenommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Jetzt zum eigentlichen Problem:</p>
<ol>
<li>Wie kann ich ein File mit der Endung .pt öffnen um es weiterzuverarbeiten?</li>
<li>Wie lässt sich ein File so durchscannen nach Werten? Ich mein, es ist logisch dass ich eine if-Schleife machen muss die abfragt ob es gerade &quot;0x63&quot; ist aber das Ganze muss in einer do-while Schleife sein und ich peil deren Ablauf nicht.</li>
<li>Wenn ich das File mit einem Textbearbeitungsprogramm öffne sieht es ungefähr so aus (ist nur ein klitzekleiner Abschnitt): <a href="http://www.quarz.cc/axd/beispiel.jpg" rel="nofollow">HIER KLICKEN</a> . Wie kann ich nicht nach DEM Inhalt suchen sondern nach den Teilen da oben wie &quot;0x63&quot; etc?</li>
</ol>
<p>Sind wahrscheinlich etwas schwerere Fragen aber hier gibt es auch jede Menge guter Coder die vielleicht einige Ansätze, Anregungen etc. geben können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/84178/datei-quot-durchscannen-quot-und-säubern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 02:00:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/84178.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Aug 2004 12:58:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Fri, 27 Aug 2004 12:58:28 GMT]]></title><description><![CDATA[<p>Hallo, ich bins mal wieder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich habe mehr oder weniger 2 Probleme bzw. Fragen. Erstmal die Geschichte:</p>
<p>Es handelt sich nicht um normale Textdateien sondern um Dateien mit der Endung &quot;.pt&quot;. Es geht darum, dass ganze File &quot;durchzuscannen&quot; und alle &quot;0x63&quot; Werte rauszulöschen weil sie da drin unnötig sind und die Dateien nur zwecklos grösser machen (sogar ziemlich grösser). Ich habe mir dabei gedacht, dass das Programm erstmal alle Dateien aus dem Ordner und den Unterordnern ausliest den ich angegeben habe (habe ich bereits fertig). Danach erstellt es eine exakte &quot;temporäre&quot; Kopie aller File-Namen mit einer zusätzlichen &quot;.pr&quot; Endung (steht für PRocess). Also wenn jetzt z.B. ein File &quot;<a href="http://12345.pt" rel="nofollow">12345.pt</a>&quot; heisst, wird ein leeres neues File erstellt welches &quot;<a href="http://12345.pt.pr" rel="nofollow">12345.pt.pr</a>&quot; heisst. Selber Name, zusätzliche Endung, kein Inhalt. Soweit sollte ich es noch schaffen. Jetzt zum eigentlichen Probem: Dem Scannen. Ich dachte mir, dass ich das File durchscannen lasse und alle Datentypen die NICHT &quot;0x63&quot; sind in dieses erstellte &quot;.pr&quot;-File speichere. Dies muss fast so sein weil man ja das File während dem scannen schlecht direkt verändern kann und es auch einfacher geht gerade alles was brauchbar ist in ein neues zu speichern. Am Schluss des Prozesses wird die originale &quot;.pt&quot; Datei gelöscht und die neue &quot;.pr&quot; Datei ohne diese &quot;0x63&quot; umbenannt resp. das &quot;.pr&quot; am Schluss weggenommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Jetzt zum eigentlichen Problem:</p>
<ol>
<li>Wie kann ich ein File mit der Endung .pt öffnen um es weiterzuverarbeiten?</li>
<li>Wie lässt sich ein File so durchscannen nach Werten? Ich mein, es ist logisch dass ich eine if-Schleife machen muss die abfragt ob es gerade &quot;0x63&quot; ist aber das Ganze muss in einer do-while Schleife sein und ich peil deren Ablauf nicht.</li>
<li>Wenn ich das File mit einem Textbearbeitungsprogramm öffne sieht es ungefähr so aus (ist nur ein klitzekleiner Abschnitt): <a href="http://www.quarz.cc/axd/beispiel.jpg" rel="nofollow">HIER KLICKEN</a> . Wie kann ich nicht nach DEM Inhalt suchen sondern nach den Teilen da oben wie &quot;0x63&quot; etc?</li>
</ol>
<p>Sind wahrscheinlich etwas schwerere Fragen aber hier gibt es auch jede Menge guter Coder die vielleicht einige Ansätze, Anregungen etc. geben können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/593117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593117</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Fri, 27 Aug 2004 12:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Thu, 21 Oct 2004 18:22:11 GMT]]></title><description><![CDATA[<p>Hm, also du kannst die Datei mit ofstream öffnen, und mit ifstream die<br />
kopie schreiben. (steht in der C++ FAQ).<br />
Dann könntest du dir ne funktion basteln, die den Pfad der Datei übergeben<br />
bekommt, diese öffnet und durchscannt, und dann als .pr abspeichert.<br />
Zum Durchsuchen kannst du unter MFC CFileFind nehmen. Ich hab mal ne<br />
Klasse geschrieben, die das Scannen erleichtert, und CFileFind kapselt <a href="http://devil81.de/shared/php/download.php?file=DirScanner.zip&amp;pid=13&amp;dwldid=2" rel="nofollow">DirScanner</a><br />
Der Klasse kannst du auch Funktionspointer übergeben, auf deine Funktion...</p>
<p>Devil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/593191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593191</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Thu, 21 Oct 2004 18:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Mon, 30 Aug 2004 12:56:46 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort. Das mit der Funktion dachte ich mir auch und das übergeben selber ist auch nicht das Problem. Das einzige Problem was ich jetzt habe und einfach nicht lösen kann ist das &quot;scannen&quot; des Files. Folgendes Datenblatt habe ich hier:</p>
<blockquote>
<p><strong>Scanner (NV6)</strong><br />
Datentyp: 0x63</p>
<p><strong>Header:</strong><br />
1 Byte (BYTE) | 2 Byte (WORD) | 1 Byte (BYTE) | 1 Byte (CHAR)</p>
</blockquote>
<p>Ich muss also immer den Header auslesen und nur falls es dieses 0x63 ist soll er nichts unternehmen und einfach weiterleen, ansonsten alles ins neue File speichern. Vielleicht könnte man was mit .read machen aber ich hab schon in der MSDN Library geschaut aber die hilft mir keinen Millimeter weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/595277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/595277</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Mon, 30 Aug 2004 12:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Mon, 30 Aug 2004 13:16:32 GMT]]></title><description><![CDATA[<p>Hy ,<br />
du willst so wie ich das verstehe eine nicht textdatei öffen , byteweise abchecken ob es sich um 0x63 handelt oder nicht und alle nicht 0x63 info abspeichern ?</p>
<pre><code>//binär einlesen
	CFile cfb( filename , CFile::modeRead|CFile::typeBinary) ;
	DWORD lenB = cfb.GetLength() ; //grösse der einzulesenden datei
    unsigned int bmfArrLen;        //array länge	
    BYTE *bmfArr;                  //unsigned byte
      //falls es sich um short oder integers handelt einfach tyen ersetzen
	bmfArrLen = (lenB/sizeof(WORD)) ;
	bmfArr = new BYTE[bmfArrLen];  //unsigned short
	cfb.Read(bmfArr , lenB); 

      // jetzt liegt erstmal die ganze datei im BYTE Array bmfArr
      for(int i= 0 ; i &lt; bmfArrLen ; i++)
      {
          if(bmfArr[i] != 0x63)
          {
             //in neues ByteArray schreiben und diese sichern
          }
      }
      cfb.Close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/595303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/595303</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Mon, 30 Aug 2004 13:16:32 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Mon, 30 Aug 2004 13:48:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Hy ,<br />
du willst so wie ich das verstehe eine nicht textdatei öffen , byteweise abchecken ob es sich um 0x63 handelt oder nicht und alle nicht 0x63 info abspeichern ?</p>
</blockquote>
<p>Genau.</p>
<p>Danke dir für den Aufwand! In der Abfrage selber sehe ich keinen Fehler aber er gibt mir an &quot;C:datei.pt2 wurde nicht gefunden&quot;. Zuerst dachte ich er hat ein Problem mit dem übergeben des Pfades und habe kurz eine neue Variable erstellt und dort einen statischen Pfad deklariert. Doch komischerweise geht das auch nicht. Das File existiert 100%, den Pfade habe ich auch 100% richtig angegeben aber wie man sieht schneidet er das &quot;\&quot; nach &quot;C:&quot; ab, obwohl ich das geschrieben habe. Gibts ein spezielles Zeichen dafür oder wie seh ich das? So einen Fehler hab ich noch gar nie gesehen, hab schon öfter mit Pfaden gearbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/595355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/595355</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Mon, 30 Aug 2004 13:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Mon, 30 Aug 2004 15:57:04 GMT]]></title><description><![CDATA[<p>hy ,<br />
das problem liegt auf der hand .. jedes darzustellende \ muss durch \\ angebenen werden. ist klar dass er die datei nicht findet ..<br />
ebenfalls ein &quot; muss durch \&quot; und ein ' durch \' dargestellt werden ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/595390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/595390</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Mon, 30 Aug 2004 15:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 31 Aug 2004 12:14:46 GMT]]></title><description><![CDATA[<p>Ja, es war mir nach 5 Minuten auch offensichtlich und ich habs geändert. Trotzdem danke.</p>
<p>Nun doch noch eine kurze Frage: Du speicherst ja in deinem Codeteil das ganze File in einem Array, das funzt ja auch wunderbar aber ich konnte dem Datenblatt gerade entnehmen, dass nicht alle 63-er gelöscht werden sollen sondern nur ganze sog. ScannerMeldungen. Das sind die mit dem Header den ich ein paar Posts vorher geschrieben habe. Sie haben z.B. im Header zuerst die Länge, danach der timestamp, dann der typ und schlussendlich die eigentlichen daten. Der Typ ist hierbei wichtig. Wenn der 63 ist sollte es übersprungen werden. Ich verlange kein komplett funktionstüchtigen Codeteil, ich würd nur gerne wissen wie ich das auslesen kann und wie danach weiterverarbeiten und ne Abfrage draus machen. Dass es mit .read gehen sollte weiss ich. Sorry wenn ich so viel Fragen stelle aber mir ist das ganze binärverarbetungszeugs irgendwie noch neu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/596027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/596027</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Tue, 31 Aug 2004 12:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 31 Aug 2004 12:54:19 GMT]]></title><description><![CDATA[<p>Hy ,<br />
naja du suchst , wenn ich es richtig verstehe nach einem Teil einer kl. struktur, die aus(Länge , Timestamp, typ , daten) bestehen ..nämlich nach typ=0x63.<br />
jetzt muss du dir überlegen wieviel bytes jeweils deine elemente der struktur haben (zb länge = 4 bytes ), zb.timestamps = 4 bytes , zb.typ = 1 byte , zb. daten = variable 20 bytes) //nur bsp.grössen<br />
dann musst du dynamisch abfragen , sich (hier in diesem bsp ) an bytestelle<br />
9 die 0x63 befindet. wenn ja kannst du die anzahl der bytes (hier 4+4+1+20 = 29) getrost wegschmeissen ..</p>
<p>Achtung: Du musst dir überlegen wo (für bsp länge , also 4 bytes) das erste byte liegt und wo das letzte ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/596072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/596072</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Tue, 31 Aug 2004 12:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Wed, 01 Sep 2004 07:54:57 GMT]]></title><description><![CDATA[<p>Danke für die Erklärung. Mir ist der Ablauf was ich machen müsste eigentlich fast immer ziemlich klar da ich vorher schon nicht wenig Programmiererfahrungen hatte. Mein grösstes und fast einziges Problem ist die Sprache C++ an sich, also der Code. Ich kann mir genau vorstellen was eine Applikation machen muss um dazu zu kommen nur finde ich selten (auch anhand des MSDN) 100%ig raus wie es nun mit dem Code ausschaut. Es gibt irgendwie immer 10 Möglichkeiten z.B. ein File zu öffnen und anfangs verwirrt das denke ich viele. Deshalb frage ich hier so viel bis ich die Materie etwas vertieft habe, hoffe das stört nicht.</p>
<p>Zum Programm zurück: Wie gesagt verstehe ich WAS GENAU er machen müsste damit ich zum gewünschten Ergebnis komme, ich peile aber nicht wie ich das realisieren soll. Hier erstmal die gesamte Funktion (filename ist nur vorübergehend statisch aus Testzwecken):</p>
<pre><code class="language-cpp">CString filename = &quot;C:\\datei.pt2&quot;;
	CString prFilename = filename + &quot;.pr&quot;;
	int arrayLenght;
	WORD *array;											                    //WORD = 16bit unsigned int

	CFile file(filename, CFile::modeRead);					                  //Open file (binary reading is standard) 
        DWORD fileLenght = file.GetLength();					                //Lenght of the current file (DWORD = 32bit unsigned int)

        arrayLenght = (fileLenght / sizeof(WORD));					          //WORD = 16bit unsigned int
        array = (WORD*) calloc(arrayLenght, sizeof(WORD));
        file.Read(array, arrayLenght*sizeof(WORD));					         //The whole file is in the BYTE Array 'array'

	WORD lenght;											                 //WORD = 16bit unsigned int		
	DWORD timestamp;										                 //DWORD = 32bit unsigned int
	BYTE type;											                   //BYTE = 8bit unsigned int

	BeginWaitCursor();

	CFile prFile(prFilename, CFile::modeCreate | CFile::modeWrite);             //Open the .pr File (ProcessFile)
	for(int i = 0; i &lt; fileLenght; i++)
	{
		WORD varLenght = file.Read(&amp;lenght, 2);                                  //Read the lenght (2 Byte)
		DWORD varTimestamp = file.Read(&amp;timestamp, 4);                           //Read the timestamp (4 Byte)
		BYTE varType = file.Read(&amp;type, 1);                                      //Read the type (1 Byte)

                DWORD data;
                DWORD varData = file.Read(&amp;data, lenght);

		if(type != 63) 
		{
			prFile.Seek(0,CFile::end); 
			prFile.Write(lenght, 2);
			prFile.Write(timestamp, 4);
			prFile.Write(type, 1);
			prFile.Write(data, lenght);
		}
    }
	prFile.Close();                                                              //Close the ProcessFile

	EndWaitCursor();

	file.Close();										                        //Close the main-file
	free(array);											                     //Clear memory (IMPORTANT)
</code></pre>
<p>EDIT: Ich hatte nur n paar logische Fehler, jetzt sollte im oberen Part eigentlich soweit alles nicht schlceht sein. Hab nur Probleme mit dem write. Er sagt immer<br />
&quot;cannot convert parameter 1 from 'unsigned short' to 'const void *'&quot;. Wie kann ich das lösen? Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/596613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/596613</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Wed, 01 Sep 2004 07:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Wed, 01 Sep 2004 12:24:17 GMT]]></title><description><![CDATA[<p>Hy ,</p>
<p>also zu deinem Parameterübergabeproblem :<br />
ich nehme an du benutzt CFileDialog ?!<br />
dann füge einfach den cast ein :</p>
<pre><code class="language-cpp">CString path =  cfd.GetPathName();
	//CString nach char* casten
     //LPCTSRT = long pointer const string
	char * szMyString = (char *) (LPCTSTR) path;
</code></pre>
<p>dann sollte es wieder funzen ...<br />
PS. : deine for-schleife kannste optimieren .. mach ne while draus und überprüfe dann erst bei byte(zb 9)weiter .. nicht jedes byte durchgehen und checken.<br />
Wieso eigentlich free? kannst doch delete [] arrayname machen ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/596937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/596937</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Wed, 01 Sep 2004 12:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 07 Sep 2004 11:34:33 GMT]]></title><description><![CDATA[<p>Ich habs immernoch nicht geschafft. Nun ist das ganze Programm rundum fertig und ich hab eigentlich alle Klassen, Abfragen, rekursive Scans etc. gemacht. Es hapert nur an dieser einen Funktion. Der Quelltext ist eigentlich gleich geblieben also brauche ich den nicht nochmal zu posten, man kann ihn oben einsehen. Die normale .pt Datei ist meistens so von 3-5MB. Wenn ich es ausführe wird die .pt.pr Datei locker mal schnell 700MB gross. Er schreibt wahnsinnig viel Schrott rein und ich weiss nicht wie ich das ganze irgendwie &quot;intelligenter&quot; scannen und schreiben lassen kann. Was mache ich falsch? Beispiele? Wäre dankbar um jede Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/601496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/601496</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Tue, 07 Sep 2004 11:34:33 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 07 Sep 2004 12:19:58 GMT]]></title><description><![CDATA[<p>hy ,</p>
<p>1.) weil du nirgends deine werte aus dem eingelesen array benutzt?<br />
(willst du es überhaupt benutzen ansonsten muss du in der schleife<br />
sowieso dafür sorgen das dein filepoiter vorwärtsgerücktwird )<br />
2.) du immer die selben bytes interpretierst und für jedes byte!!<br />
(so tun würdest als ob es ein header bate ist und somit immer 4+2+1 bytes<br />
in die datei schreibst)</p>
<pre><code class="language-cpp">// dieser vorschlag gilt nur wenn du statt unsignde short byteweise einliest
// habe ich nicht getestet nur so provisorisch aufgestllt..
int i=0;
 WORD varLenght=0;
 DWORD varTimestamp=0;
 BYTE varType=0;

 while( i &lt; fileLenght ) 
    { 
 //Read the lenght (2 Byte)
         varLenght = array[i]&lt;&lt;8 ;  
         varLenght = varLenght | array[i+1] ;            

 //Read the timestamp (4 Byte)         
         varTimestamp = array[i+2]&lt;&lt;24 ;                     
         varTimestamp = varTimestamp | array[i+3]&lt;&lt;16;
         varTimestamp = varTimestamp | array[i+4]&lt;&lt;8;
         varTimestamp = varTimestamp | array[i+5];

 //Read the type (1 Byte) 
         varType = array[i+6];  
 // falls die struktur dynmisch in der grösse ist .. hier anpassen 
    // ist dein data 2 bytes ? oder ist es danamisch
      // also sowas wie sizeof(length) = entspricht 2
      //oder in length ist der wert zb 20 , die anzahl der bytes   

        if(type != 63) 
        { 
            prFile.Seek(0,CFile::end); 
            prFile.Write(lenght, 2); 
            prFile.Write(timestamp, 4); 
            prFile.Write(type, 1); 
            prFile.Write(data, lenght); 
        } 
        i+=7; //anzahl bytes der struktur
         // falls die struktur dynmisch in der grösse ist .. hier anpassen
         //also die 7 ggf um 2 erhöhen oder den dynamischen wert.
         // i+=(7+lenght) ;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/601560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/601560</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Tue, 07 Sep 2004 12:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 07 Sep 2004 13:37:02 GMT]]></title><description><![CDATA[<p>Wenn ich ehrlich bin versteh ich davon keinen Meter. Dass du Byte für Byte ausliest und in ein Array speicherst ist mir klar aber du liest ja nicht direkt das File aus weil du kein CFile.read() benutzt oder seh ich das falsch? Sobald ich irgend einen Scheiss in das prFile schreiben will mit dem Write gibt er mir einen Fehler aus. Zum &quot;i += 7&quot; fällt mir auch absolut nichts ein. Langsam hab ich das Gefühl ich gebs auf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/601662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/601662</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Tue, 07 Sep 2004 13:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Tue, 07 Sep 2004 14:11:26 GMT]]></title><description><![CDATA[<p>Herzlich willkommen in der welt von c++<br />
, gib bloss schnell auf und du hast deutlich mehr freizeit ..*g*</p>
<p>Also jetzt nochmal für die steinmetze zum mitmeisseln..<br />
Ich bin davon ausgegangen ,dass du den oberen teil von dir/mir übernimmst und es mit byte inliest..deshalb habe ich kein read() usw geschrieben ..(mitdenken..)</p>
<p>Ausdrucksbeschreibung:<br />
varTimestamp = varTimestamp | array[i+3]&lt;&lt;16;<br />
//shifte das i+3 byte um 2 byte nach links //4 3 2 1<br />
//weil varTimestamp (4 byte type) ist, steht jetzt das i+3 byte 0x00**0000 an<br />
//der ** position</p>
<p>//i+=7; ist das gleiche wie i= i+7 nur kürzer .. sollte aber bekannt sein</p>
<p>das mit dem schreiben könntest du auch anders machen ..<br />
in einem zusätzleichen array speichern ..und am ende alles schreiben..<br />
So muss jetzt leider nach hause..<br />
und kann erst morgen wieder reinschauen (mein arbeitgeber sei dank*g*)..</p>
<p>habe so das gefühl du schriebst wieder*g*<br />
cu Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/601708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/601708</guid><dc:creator><![CDATA[wuTangl]]></dc:creator><pubDate>Tue, 07 Sep 2004 14:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Datei &amp;quot;durchscannen&amp;quot; und säubern on Wed, 08 Sep 2004 11:33:58 GMT]]></title><description><![CDATA[<p>So, endlich habe ich es geschafft. Das Ganze funktioniert einwandfrei und die Dateien verlieren 2/3 ihrer ursprünglichen Grösse weil diese unnötigen ScannerMeldungen (die ich ja jetzt rausfiltere) ziemlich viel Platz brauchen. Vielen Dank für deine Hilfe wuTangl, warst ja der Einzige der mir geholfen hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> . Anfangs bin ich immer etwas schwerfällig was das angeht aber man sollte auch beachten dass ich erst seit 2 Wochen C++ mache. Ich hab heute morgen einfach mal meine letzte Logik hervorgeholt und versucht das Ganze so anzuschauen wie es der PC macht, hat eigentlich gut geklappt.</p>
<p>Für die die es noch interessiert noch die fertige Scanfunktion:</p>
<pre><code class="language-cpp">BOOL CScanFilterDlg::ProcessFile(CString currentFile)
{
	UpdateData(TRUE);

	int			arrayLenght;
	int			i = 0;
	BOOL		   ok;
	CString		file;
	CString		prFilename = currentFile + &quot;.pr&quot;;
	WORD		   varLenght = 0;
	DWORD		  varTimestamp = 0;
	BYTE		   varType = 0;
	BYTE		   *array;

	CFile cfile(currentFile, CFile::modeRead);							//Open file (binary reading is standard) 
    DWORD fileLenght = cfile.GetLength();

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////SAVE THE WHOLE FILE IN AN ARRAY//////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	arrayLenght = (fileLenght / sizeof(BYTE));
    array = (BYTE*) calloc(arrayLenght, sizeof(BYTE));
    cfile.Read(array, arrayLenght*sizeof(BYTE));

	CFile prFile(prFilename, CFile::modeCreate | CFile::modeWrite);		//Create ProcessFile

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////MOST IMPORTANT SCANNING LOOP/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	while(i &lt; fileLenght)
	{
		//Read the Lenght (2 Byte)
        varLenght = array[i];  
        varLenght = varLenght | array[i + 1] &lt;&lt; 8;            

		//Read the Timestamp (4 Byte)        
        varTimestamp =				array[i + 2] &lt;&lt; 24;                    
        varTimestamp = varTimestamp | array[i + 3] &lt;&lt; 16;
        varTimestamp = varTimestamp | array[i + 4] &lt;&lt; 8;
        varTimestamp = varTimestamp | array[i + 5];

		//Read the Type (1 Byte)
        varType = array[i + 6]; 

		if(varType != 0x63)
		{
			prFile.Seek(0,CFile::end);									//Jump to End of File
			prFile.Write(&amp;array[i], (7 + varLenght));					//Write whole Message
		}

		i = (i + 7 + varLenght);										//Set Cursor on next MessageStart
    }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////COMPLETE PROCESS BY CLOSING, DELETING AND RENAMING THE NECESSARY FILES///////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	cfile.Close();														//Close OldFile
	prFile.Close();														//Close ProcessFile

	cfile.Remove(currentFile);											//Remove OldFile
	prFile.Rename(prFilename, currentFile);								//Rename ProcessFile

	free(array);														//Clear Memory (IMPORTANT)

	return ok;															//Return ok

	UpdateData(FALSE);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/602364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/602364</guid><dc:creator><![CDATA[Pulse]]></dc:creator><pubDate>Wed, 08 Sep 2004 11:33:58 GMT</pubDate></item></channel></rss>