Bitte nutzen Sie für Ihre technischen Fragen und Probleme auch unsere user2user-Foren.
Hallo,
ich habe aktuell ein Problem mit notepad++ in Zusammenhang mit einem
Netzlaufwerk auf einem Mac Mini Server. Der Mac Mini Server mit Mac
OSX Lion 10.7.2 dient als Fileserver in einem heterogenen Netzwerk.
Prinzipiell funktionieren die Freigabe und das Einbinden als
Netzlaufwerk auf allen Geräten ohne Probleme. Auch der Dateizugriff
von Windows 7 Geräten mit Explorer/Word/Excel etc. geht ohne
Probleme.
Das Problem tritt mit Notepad++ und Textdateien auf, wenn die
geänderte Datei kürzer ist als die ursprüngliche. Ein Beispiel zum
Verständnis:
* Am Netzlaufwerk befindet sich eine Textdatei mit dem Inhalt:
„abcdefg“
* Die Datei wird mit Notepad++ geöffnet und mit folgendem Inhalt
überschrieben und gespeichert: „123“
* Der tatsächliche Inhalt der Datei sollte „123“ sein, lautet aber:
„123defg“
Der Inhalt kann also problemlos überschrieben werden, die Datei
behält aber die ursprüngliche Größe und kann nicht mehr gekürzt
werden. Das Problem tritt nicht nur mit Notepad++ auf, sondern
scheinbar mit allen Programmen die stdio und fopen/fwrite/fclose
verwenden. Zumindest tritt das Problem auch mit einem testhalber
erstellten Mini-Programm auf, welches inhaltlich fast unverändert von
der MSDN Dokumentation zum Thema fopen übernommen wurde (siehe
unten). Kein Problem gibt es bei der Verwendung des Standard
Texteditor (Zubehör/Editor).
Des ganze ist vor allem deshalb sehr ärgerlich, weil es keine
Fehlermeldung gibt und der Fehler lange nicht auffällt. Irgendwann
sind dann aber plötzlich eine Menge Textdateien mit unerwarteten und
unerwünschten Inhalten am Server.
Ist das Problem bekannt und kennt jemand vielleicht eine Lösung?
Danke und lG, Ketschak
#include <stdio.h>
#include <tchar.h>
#define BUFFER_SIZE 50
#define MYSTR L"123"
#define FILENAME L"S:\\Documents\\test.txt"
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[BUFFER_SIZE] = MYSTR;
size_t strSize;
FILE* fileHandle;
fileHandle = _wfopen( FILENAME , L"wb");
if (fileHandle == NULL)
{
wprintf(L"_wfopen failed!\n");
return(0);
}
strSize = wcslen(str);
if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
{
wprintf(L"fwrite failed!\n");
}
// Close the file.
if (fclose(fileHandle))
{
wprintf(L"fclose failed!\n");
}
return 0;
}