Forum: PC-Programmierung WinUI3 Dateioperationen


von Thorsten M. (mightyshite)


Lesenswert?

Moin Moin zusammen,

ich versuche mich gerade an einem kleinen Programm, das mir eine 
Textdatei erstellen soll. Ein Userinterface habe ich mir schon per 
WINUI3 und Vicual Studio zusammengebastelt, aber jetzt hakt es an den 
Dateioperationen. Die unten stehende Funktion wird aufgerufen, wenn ich 
auf den Button 'Datei erstellen' (oder so ähnlich) klicke. Im 
Debug-Modus bleibt das Programm auf der fwrite Zeile mit der Meldung 
stehen:

Ausnahmefehler bei 0x00007FFFE9EDAFEC (ucrtbased.dll) in 
Gravur_Artikelnummer_Datum_Logo_0.93.exe: Ein ungültiger Parameter wurde 
an eine Funktion übergeben, die ungültige Parameter als schwerwiegend 
einstuft.

Welcher Parameter ist denn da genau ungültig? Und wie bekomme ich das 
Ganze funktionierend?

Vielen Dank schon einmal...
1
void Gravur_Artikelnummer_Datum_Logo_0_93::MainPage::Starte_PlanetCNC_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
2
{
3
  Status->Text = "erstelle Datei";
4
5
  FILE * pfile;
6
7
  char   s[30] = "this is a string";
8
  int numwritten;
9
10
  fopen_s(&pfile, "c:\\PlanetCNC\\test.txt", "w+t");
11
12
  fwrite(s, sizeof(char), 30, pfile);
13
  
14
  fclose(pfile);
15
}

von Vax W. (Gast)


Lesenswert?

Und was liefert fopen_s als Rueckgabewert? Null waere Success. Ansonsen 
doserr angucken

von Thorsten M. (mightyshite)


Lesenswert?

ich habe folgende beiden zeilen eingefügt bzw. geändert:
1
  numwritten = fopen_s(&pfile, "c:\\PlanetCNC\\test.txt", "w+t");
2
3
  if (numwritten == 0) while (1);

Das Programm läuft trotzdem weiter, also nehme ich an, dass der 
Rückmeldewert von fopen_s = 0 ist.

von Vax W. (Gast)


Lesenswert?

Das Betriebssystem bietet Dir Unterstuetzung (mit Error-Codes), und Du 
"nimmst an".

Schon gut.

von Florian S. (sevenacids)


Lesenswert?

Da der Code ohnehin Windows-lastig ist, könntest du auch die 
entsprechenden Win32 APIs (OpenFile etc.) für Dateioperationen 
verwenden. GetLastError liefert eventuell mehr Informationen als errno. 
Letztlich ist Windows aber nicht mehr mein Fach.

Ansonsten: Immer die Rückgabewerte von Funktionen prüfen und verfahren, 
wie es in der Doku der jeweiligen API angegeben ist.

von Thorsten M. (mightyshite)


Lesenswert?

okay, ich muss mich korrigieren, der Rückmeldecode is 'permission 
denied'

von Thorsten M. (mightyshite)


Lesenswert?

Im Verzeichnis habe ich jetzt eine Datei angelegt und alle Operationen 
für alle Benutzer freigegeben. Trotzdem bleibt die Fehlermeldung 
'permission denied', auch für fopen zum lesen...

von Εrnst B. (ernst)


Lesenswert?

Du verwendest doch eh schon Managed C++, warum versuchst du da unmanaged 
C - Code reinzuwüfeln, was eigentlich garnicht notwendig wäre? .NET kann 
auch so Dateien schreiben, File::Create&co aus System::IO etc...
1
File.WriteAllText("c:\\PlanetCNC\\test.txt","this is a string");
als Einzeiler?

: Bearbeitet durch User
von Thorsten M. (mightyshite)


Lesenswert?

..weil ich eigentlich nur ein kleines programm schreiben wollte, mein 
eigentliches betätigungsfeld ist 'programmieren, embedded umgebung' und 
das nur so nebenbei...

das programm soll meinen kollegen nur die arbeit erleichtern, bis 
hierhin bin ich gekommen.

von Harald K. (kirnbichler)


Lesenswert?

Existiert denn das Verzeichnis "c:\PlanetCNC"?

Wenn es das nicht gibt, kann auch keine Datei darin angelegt werden.

von Thorsten M. (mightyshite)


Lesenswert?

Ja, der Ordner existiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.