<?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[CreateFileMapping]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe eine Frage bezüglich CreateFileMapping.<br />
Ich greife folgendermaßen auf eine Datei zu die bis zu 2GB groß sein kann:</p>
<pre><code class="language-cpp">void *vOpenFileMapping(DWORD *pdwSize)
{
	HANDLE	hFile = NULL;
	HANDLE	hFileMapping = NULL;
	void	*ptAddress = NULL;

	hFile = CreateFile(&quot;C:\\Test.dat&quot;,
		   GENERIC_ALL,
		   FILE_SHARE_READ,
		   NULL,
		   OPEN_EXISTING,
		   FILE_ATTRIBUTE_NORMAL,
		   NULL);

	if (hFile == INVALID_HANDLE_VALUE)
		return;

	pdwSize = GetFileSize(hFile, NULL);

	hFileMapping = CreateFileMapping( hFile,
			NULL,
			PAGE_READWRITE,
			0,
			0,
			NULL);

	if (hFileMapping == INVALID_HANDLE_VALUE)
	{
		if (hFile != INVALID_HANDLE_VALUE)
			CloseHandle(hFile);
		return;
	}
	ptAddress = MapViewOfFile(hFileMapping,
			FILE_MAP_WRITE,
			0,
			0,
			0);
	return ptAddress;
}
</code></pre>
<p>So jetzt kommt endlich die Frage. Wenn ich nun an das geöffnete File etwas anhängen will,<br />
muss ich dann das komplette View und Mapping erst schließen und dann mit den Sizes bei CreateFileMapping und MapViewOfFile rumspielen oder gibt es einen elganteren weg??<br />
Zu dem Zeitpunkt wo ich das Mapping erstelle weiß ich leider noch nicht wieviel Daten ich anhängen muss. Außerdem versteh ich das nicht so ganz mit den High-order und Low-order DWord bei CreateFielMapping. Kann mir das mal einer erklären??</p>
<p>Danke im vorraus,<br />
Damion</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/73464/createfilemapping</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 12:14:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/73464.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 May 2004 16:04:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CreateFileMapping on Mon, 10 May 2004 16:04:15 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe eine Frage bezüglich CreateFileMapping.<br />
Ich greife folgendermaßen auf eine Datei zu die bis zu 2GB groß sein kann:</p>
<pre><code class="language-cpp">void *vOpenFileMapping(DWORD *pdwSize)
{
	HANDLE	hFile = NULL;
	HANDLE	hFileMapping = NULL;
	void	*ptAddress = NULL;

	hFile = CreateFile(&quot;C:\\Test.dat&quot;,
		   GENERIC_ALL,
		   FILE_SHARE_READ,
		   NULL,
		   OPEN_EXISTING,
		   FILE_ATTRIBUTE_NORMAL,
		   NULL);

	if (hFile == INVALID_HANDLE_VALUE)
		return;

	pdwSize = GetFileSize(hFile, NULL);

	hFileMapping = CreateFileMapping( hFile,
			NULL,
			PAGE_READWRITE,
			0,
			0,
			NULL);

	if (hFileMapping == INVALID_HANDLE_VALUE)
	{
		if (hFile != INVALID_HANDLE_VALUE)
			CloseHandle(hFile);
		return;
	}
	ptAddress = MapViewOfFile(hFileMapping,
			FILE_MAP_WRITE,
			0,
			0,
			0);
	return ptAddress;
}
</code></pre>
<p>So jetzt kommt endlich die Frage. Wenn ich nun an das geöffnete File etwas anhängen will,<br />
muss ich dann das komplette View und Mapping erst schließen und dann mit den Sizes bei CreateFileMapping und MapViewOfFile rumspielen oder gibt es einen elganteren weg??<br />
Zu dem Zeitpunkt wo ich das Mapping erstelle weiß ich leider noch nicht wieviel Daten ich anhängen muss. Außerdem versteh ich das nicht so ganz mit den High-order und Low-order DWord bei CreateFielMapping. Kann mir das mal einer erklären??</p>
<p>Danke im vorraus,<br />
Damion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/517696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/517696</guid><dc:creator><![CDATA[Damion]]></dc:creator><pubDate>Mon, 10 May 2004 16:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to CreateFileMapping on Wed, 12 May 2004 03:15:17 GMT]]></title><description><![CDATA[<p>Also wenn keiner antwortet der wirklich 'n Plan hat Versuch ich es mal :<br />
erstmal zum einfachen: das 'High-order Dword' ist für die Größenangabe falls Deine Datei größer als 4GB sein sollte (DWord=32bit=4Gb Adressraum) und wird nur eh nur benötig wenn Du nur einen Teil der Datei mappen möchtest oder die Datei beim Aufruf vergrößern möchtest.</p>
<p>Mit 'MapViewOfFile' wirst Du auch nie eine ganze 2Gb Datei mappen können, da Deinem Prozess insgesamt nur soviel Adressraum zugestanden wird.<br />
Der sinnvollere Weg um mit der Vergrößerung umzugehen wäre alle Operationen die über das Dateiende hinausgehen erstmal im Speicher vornehmen und nur am Schluss (oder sehr großen Ergänzungen) ans Ende schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518588</guid><dc:creator><![CDATA[Lui]]></dc:creator><pubDate>Wed, 12 May 2004 03:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to CreateFileMapping on Thu, 13 May 2004 17:47:58 GMT]]></title><description><![CDATA[<p>Hi Lui,</p>
<p>danke für die Erklärung. Der Lösungsansatz mit am Ende schreiben hört sich garnicht mal so schlecht an. Ich denke das werde ich dahingehend ändern, zur Zeit schließe ich nämlich das Mapping und das View und öffne beides danach wieder. Nicht ganz so sinnvoll.</p>
<p>Damion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/519890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/519890</guid><dc:creator><![CDATA[Damion]]></dc:creator><pubDate>Thu, 13 May 2004 17:47:58 GMT</pubDate></item></channel></rss>