<?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[Files überschreiben]]></title><description><![CDATA[<pre><code class="language-cpp">BOOL ( WINAPI Mine_DeleteFileW )( LPCTSTR lpFileName ){
	std::wstring FileName = lpFileName;
	HANDLE hFile = CreateFileW( FileName.c_str(),
								FILE_ALL_ACCESS, 
								NULL, 
								NULL, 
								OPEN_EXISTING,
								FILE_ATTRIBUTE_NORMAL,
								NULL );
	if ( hFile == INVALID_HANDLE_VALUE){
		OutputDebugStringW(L&quot;File handle couldnt be opened&quot;);
	}else{
		__int64 Size;
		if ( !GetFileSizeEx( hFile, (PLARGE_INTEGER)&amp;Size ) ){
			OutputDebugStringW(L&quot;Couldnt optain size of file&quot;);
		}else{
			OutputDebugStringA(IntToString(Size).c_str());
			char * Buffer;
			int NumWritten;
			const int BufferSize = 1048576;// 1Mb	
			if ( Size &gt;= BufferSize ){
				__int64 Rounds = Size / BufferSize;
				OutputDebugStringA((IntToString(Rounds) + (std::string)&quot; Rounds&quot;).c_str());
				int Rest = ( Size - ( Rounds * BufferSize ) );
				OutputDebugStringA((IntToString(Rest) + (std::string)&quot; Rest&quot;).c_str());
				Buffer = new char[BufferSize];
				std::fill(Buffer,Buffer+BufferSize,0);
				LARGE_INTEGER Num;
				Num.QuadPart = BufferSize;
				for ( __int64 i = 0; i &lt; Rounds; i++ ){
					if ( !WriteFile( hFile, Buffer, BufferSize, (PDWORD)&amp;NumWritten, NULL ) ){
						OutputDebugStringW(L&quot;Write file broke inside loop&quot;);
						break;
					}
					if ( NumWritten != BufferSize )OutputDebugStringA(((std::string)&quot;Wrote to less in Round : &quot; + IntToString(i) ).c_str());
					if ( !SetFilePointerEx( hFile, Num, NULL, FILE_CURRENT ) ){
						OutputDebugStringW(L&quot;SetFilePointer failed&quot;);
					}

				}
				delete[] Buffer;
				if ( Rest != 0 ){
					Buffer = new char[Rest];
					std::fill(Buffer,Buffer+Rest,0);
					if ( !WriteFile( hFile, Buffer, Rest, (PDWORD)&amp;NumWritten, NULL ) ){
						OutputDebugStringW(L&quot;Write file broke inside rest&quot;);
					}
					if ( NumWritten != BufferSize )OutputDebugStringW(L&quot;Wrote too less inside rest!&quot;);	
					delete[] Buffer;
				}
			}else{
				Buffer = new char[Size];
				std::fill(Buffer,Buffer+Size,0);
				if ( !WriteFile( hFile, Buffer, Size, (PDWORD)&amp;NumWritten, NULL ) ){
					OutputDebugStringW(L&quot;Write file broke inside small version&quot;);
				}
				if ( NumWritten != BufferSize )OutputDebugStringW(L&quot;Wrote too less in small!&quot;);
				delete[] Buffer;
			}
			FileName += L&quot; was safe deleted : Wide&quot;;
			OutputDebugStringW(FileName.c_str());
		}
		CloseHandle(hFile);
	}

	return false;//Real_DeleteFileW(lpFileName);
}
</code></pre>
<p>Hi, also ich dachte ich hätte den fehler selbst gefunden, aber es ist leider nicht so :(...</p>
<p>Der quellcode wie er jetzt ist überschreibt nur immer einen teil der Datei richtig, aber nie ganz. Weiß jemand von euch villeicht wieso?</p>
<p>Edit:<br />
Also hab bemerkt das die files beim schreiben wachsen, kann das sein das der hinzufügt anstatt überschreibt o.o?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244668/files-überschreiben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 22:40:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244668.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jul 2009 14:58:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Files überschreiben on Fri, 03 Jul 2009 15:14:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BOOL ( WINAPI Mine_DeleteFileW )( LPCTSTR lpFileName ){
	std::wstring FileName = lpFileName;
	HANDLE hFile = CreateFileW( FileName.c_str(),
								FILE_ALL_ACCESS, 
								NULL, 
								NULL, 
								OPEN_EXISTING,
								FILE_ATTRIBUTE_NORMAL,
								NULL );
	if ( hFile == INVALID_HANDLE_VALUE){
		OutputDebugStringW(L&quot;File handle couldnt be opened&quot;);
	}else{
		__int64 Size;
		if ( !GetFileSizeEx( hFile, (PLARGE_INTEGER)&amp;Size ) ){
			OutputDebugStringW(L&quot;Couldnt optain size of file&quot;);
		}else{
			OutputDebugStringA(IntToString(Size).c_str());
			char * Buffer;
			int NumWritten;
			const int BufferSize = 1048576;// 1Mb	
			if ( Size &gt;= BufferSize ){
				__int64 Rounds = Size / BufferSize;
				OutputDebugStringA((IntToString(Rounds) + (std::string)&quot; Rounds&quot;).c_str());
				int Rest = ( Size - ( Rounds * BufferSize ) );
				OutputDebugStringA((IntToString(Rest) + (std::string)&quot; Rest&quot;).c_str());
				Buffer = new char[BufferSize];
				std::fill(Buffer,Buffer+BufferSize,0);
				LARGE_INTEGER Num;
				Num.QuadPart = BufferSize;
				for ( __int64 i = 0; i &lt; Rounds; i++ ){
					if ( !WriteFile( hFile, Buffer, BufferSize, (PDWORD)&amp;NumWritten, NULL ) ){
						OutputDebugStringW(L&quot;Write file broke inside loop&quot;);
						break;
					}
					if ( NumWritten != BufferSize )OutputDebugStringA(((std::string)&quot;Wrote to less in Round : &quot; + IntToString(i) ).c_str());
					if ( !SetFilePointerEx( hFile, Num, NULL, FILE_CURRENT ) ){
						OutputDebugStringW(L&quot;SetFilePointer failed&quot;);
					}

				}
				delete[] Buffer;
				if ( Rest != 0 ){
					Buffer = new char[Rest];
					std::fill(Buffer,Buffer+Rest,0);
					if ( !WriteFile( hFile, Buffer, Rest, (PDWORD)&amp;NumWritten, NULL ) ){
						OutputDebugStringW(L&quot;Write file broke inside rest&quot;);
					}
					if ( NumWritten != BufferSize )OutputDebugStringW(L&quot;Wrote too less inside rest!&quot;);	
					delete[] Buffer;
				}
			}else{
				Buffer = new char[Size];
				std::fill(Buffer,Buffer+Size,0);
				if ( !WriteFile( hFile, Buffer, Size, (PDWORD)&amp;NumWritten, NULL ) ){
					OutputDebugStringW(L&quot;Write file broke inside small version&quot;);
				}
				if ( NumWritten != BufferSize )OutputDebugStringW(L&quot;Wrote too less in small!&quot;);
				delete[] Buffer;
			}
			FileName += L&quot; was safe deleted : Wide&quot;;
			OutputDebugStringW(FileName.c_str());
		}
		CloseHandle(hFile);
	}

	return false;//Real_DeleteFileW(lpFileName);
}
</code></pre>
<p>Hi, also ich dachte ich hätte den fehler selbst gefunden, aber es ist leider nicht so :(...</p>
<p>Der quellcode wie er jetzt ist überschreibt nur immer einen teil der Datei richtig, aber nie ganz. Weiß jemand von euch villeicht wieso?</p>
<p>Edit:<br />
Also hab bemerkt das die files beim schreiben wachsen, kann das sein das der hinzufügt anstatt überschreibt o.o?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736684</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Fri, 03 Jul 2009 15:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Fri, 03 Jul 2009 15:39:49 GMT]]></title><description><![CDATA[<p>Ich glaube, statt OPEN_EXISTING musst du TRUNCATE_EXISTING nehmen. Probier's mal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736711</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 03 Jul 2009 15:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Fri, 03 Jul 2009 17:12:44 GMT]]></title><description><![CDATA[<p>Ja, aber ich brauch ja die frühere größe der datei, und wenn ich das so machen muss ich 2x create file aufrufen, und das nimmt ja mehr zeit in anspruch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736785</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Fri, 03 Jul 2009 17:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sat, 04 Jul 2009 11:45:27 GMT]]></title><description><![CDATA[<p>Also das mit den 2 Create File aufrufen hab ich probiert, wenn ich das erste aufruf, dann die größe ermittel, CloseHandle drauf mach, und das zweite aufruf, krieg ich nur INVALID HANDLE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737015</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sat, 04 Jul 2009 11:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sat, 04 Jul 2009 16:17:12 GMT]]></title><description><![CDATA[<p>Was soll den das mit SetFilePointer? WriteFile justiert doch den File-Pointer?<br />
IMHO überspringst Du damit einen Block.</p>
<p>Weiterhin macht es IMHO keinen sinn einen 1mb Block zu schreiben. Du kannst genausogut 4kb Blöcke schreiben, das wird IMHO nicht schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737085</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 04 Jul 2009 16:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sat, 04 Jul 2009 18:34:54 GMT]]></title><description><![CDATA[<p>Danke für den hinweiß mit dem Block überspringen, jetzt gehts übrigens. Aber ich hab die erfahrung gemacht das 2x 1mb buffer schreiben schneller geht als ( 2 mb / 4kb ) mal schreiben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737135</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sat, 04 Jul 2009 18:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sat, 04 Jul 2009 19:57:20 GMT]]></title><description><![CDATA[<p>Liegt wahrscheinlich im Millisekunden Bereich. Dafür blähst Du Dein Programmm mit einer unnötigen Speicheranforderung auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737199</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 04 Jul 2009 19:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sun, 05 Jul 2009 08:46:53 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Liegt wahrscheinlich im Millisekunden Bereich. Dafür blähst Du Dein Programmm mit einer unnötigen Speicheranforderung auf.</p>
</blockquote>
<p>... und auch das soll man tunlichst vermeiden ...<br />
Hat was mit Optimierung zu tun. Man kann nur entweder nach Laufzeit oder nach Speicherbedarf optimieren. Wenn es um Millisekunden geht, erscheint mir jede Optimierung nach der Laufzeit unsinnig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737337</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sun, 05 Jul 2009 08:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sun, 05 Jul 2009 09:50:30 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Liegt wahrscheinlich im Millisekunden Bereich. Dafür blähst Du Dein Programmm mit einer unnötigen Speicheranforderung auf.</p>
</blockquote>
<p>... und auch das soll man tunlichst vermeiden ...<br />
Hat was mit Optimierung zu tun. Man kann nur entweder nach Laufzeit oder nach Speicherbedarf optimieren. Wenn es um Millisekunden geht, erscheint mir jede Optimierung nach der Laufzeit unsinnig.</p>
</blockquote>
<p>100% ACK!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737367</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 05 Jul 2009 09:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sun, 05 Jul 2009 11:02:48 GMT]]></title><description><![CDATA[<p>so, ich hab ja als erstes gesagt dieses projekt von mir spielt sich im rahmen eines addins für den explorer ab, und dort sind file größen von &gt; 4 gb keine seltenheit also hab ich hier mal nen beispiel gemacht mit 200mb.</p>
<p>edit: ups das war in nem anderen post <sup>.</sup> sag ichs halt jetzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#pragma hdrstop
#include &lt;windows.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
  __int64 Frequency, Start, End;

  if (!QueryPerformanceFrequency((LARGE_INTEGER*)&amp;Frequency))
    return 0;
	string FileName = &quot;Datei.txt&quot;;
	HANDLE hFile = CreateFile( FileName.c_str(),
								FILE_ALL_ACCESS,
								NULL,
								NULL,
								CREATE_NEW,
								FILE_ATTRIBUTE_NORMAL,
								NULL );
	if ( hFile == INVALID_HANDLE_VALUE){
		cout &lt;&lt; &quot;File handle couldnt be opened to write file\n&quot;;
	}
  char * Buffer;
  int NumWritten;
  int BufferSize = 1048576;
  int Rounds = 200; // 200 mb.
  for ( int n = 0; n &lt; 2; n++ ){
    Buffer = new char[BufferSize];
    std::fill(Buffer,Buffer+BufferSize,0);
    QueryPerformanceCounter((LARGE_INTEGER*)&amp;Start);
    for ( int i = 0; i &lt; Rounds; i++ ){
      if ( !WriteFile( hFile, Buffer, BufferSize, (PDWORD)&amp;NumWritten, NULL ) ){
        cout &lt;&lt; &quot;Write file failed\n&quot;;
      }
      if ( NumWritten != BufferSize )
        cout &lt;&lt; &quot;Wrote too less inside rest!\n&quot;;
    }
    QueryPerformanceCounter((LARGE_INTEGER*)&amp;End);
    cout &lt;&lt; &quot;Zeit: &quot; &lt;&lt; ( End - Start ) / (double)Frequency  &lt;&lt; &quot; Buffer: &quot; &lt;&lt; BufferSize &lt;&lt; endl ;
    delete[] Buffer;
    BufferSize = 1024;// 200mb mit 1kbyte buffer
    Rounds = 204800;
  }
  CloseHandle(hFile);

  return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<blockquote>
<p>Ausgabe:<br />
Zeit: 5.86576 Buffer: 1048576<br />
Zeit: 11.4128 Buffer: 1024</p>
</blockquote>
<p>das ist der unterschied den ich erkenne bei 200mb, korrigiert mich bitte wenn ich was falsch gemacht habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2764.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--red_heart"
      title="&lt;3"
      alt="❤"
    /> ( Zeit in sekunden )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737397</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sun, 05 Jul 2009 11:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sun, 05 Jul 2009 13:42:25 GMT]]></title><description><![CDATA[<p>Eine Datei mit mehr als 4 gB ist kein peanut. Da musst Du wohl eher nach der Laufzeit mit grösserem buffer optimieren. Du hast das Problem erkannt. Wie sollen wir da helfen? Zum Glück sind Speicheranforderungen heute kein grosses Hindernis mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737447</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sun, 05 Jul 2009 13:42:25 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Sun, 05 Jul 2009 15:55:35 GMT]]></title><description><![CDATA[<p>Ich wollt die millisekunden differenz nur nicht auf mir sitzen lassen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1737488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737488</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sun, 05 Jul 2009 15:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Files überschreiben on Mon, 06 Jul 2009 09:27:25 GMT]]></title><description><![CDATA[<p>Sei doch bitte nicht gleich pikiert wegen der Millisekunden. Bei mehreren Sekunden kann die Frage schon interessant sein. Vielleicht teilst Du mal mit, was und wieviel sich ändern kann und ob Datenblöcke gekürzt oder eingeschoben werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737783</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 06 Jul 2009 09:27:25 GMT</pubDate></item></channel></rss>