Ich möchte (innerhalb einer Anwendung) u.a. die Größe einer Datei bestimmen. Dazu finde ich in der Toolkit-Hilfe "addendum.inf" ein Beispiel zu DosQueryPathInfo(). Hab's ausprobiert mit dem VisualAge-3.08-Compiler und tut.
Sodann leicht modifiziert, formal zunächst so dass es mit "C++" compiliert wird (auch ok) , und anschließend...
(1) an "FILESTATUS3" ein "L" angehängt und passend dazu "FIL_STANDARDL". Passt ebenfalls.
(2) zwei Zeilen "cout << ..." eingefügt: Der Compiler meldet zur zweiten Zeile "Call does not match any argument list for "ostream::operator<<" im Falle "...L", nicht aber ohne "...L". Suspekt...

Habe schon durchgegoogelt, aber da unterhalten sich anscheinend nur fortgeschrittene Experten. Ich dagegen bräuchte eine Erklärung (oder Fundstelle) als sei ich Fünf...

Zusatzfrage: das Resultat Dateigröße (".cbFile") usw. möchte ich ja eigentlich nicht auf der Konsole anzeigen, sondern weiterreichen an eine verarbeitende Routine. Auch der Pfadname nicht etwa eingetippt, sondern von einer aufrufenden Routine variabel übergeben. Worauf muss ich dabei achten? Oder gibt es etwas viel Einfacheres? Danke im voraus

Mein modifizierter Code-Sample hier (vgl.Toolkit- "addendum.inf"):
Code: Alles auswählen
#define INCL_DOSFILEMGR /* File Manager values */
#define INCL_DOSERRORS /* DOS error values */
#include <os2.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h> /* -- eingefügt -- */
int main(VOID) {
PCSZ path = "C:\\config.sys"; /* File to manipulate */
FILESTATUS3L fs = {{0}}; /* Buffer for file information */
ULONG ulBufSize = sizeof(FILESTATUS3L); /* Size of above buffer */
APIRET rc = NO_ERROR; /* Return code */
rc = DosQueryPathInfo(path, /* Path and name of file */
FIL_STANDARDL, /* Request standard (Level 11) info */
&fs, /* Buffer for file information */
ulBufSize); /* Size of buffer */
if (rc != NO_ERROR) {
printf("DosQueryPathInfo error: return code = %u\n", rc);
return 1;
}
/* -- eingefügt -- */
cout << path << endl; /* ok */
cout << fs.cbFile << endl; /* ok ohne "..L", error mit "..L" */
printf("%s --- File size: %u bytes\n",path, fs.cbFile);
printf("Last updated: %d.%d.%d; %d:%2.2d\n",
fs.fdateLastWrite.day, /* Day */
fs.fdateLastWrite.month, /* Month */
(fs.fdateLastWrite.year+1980L), /* Years since 1980 */
fs.ftimeLastWrite.hours, /* Hours */
fs.ftimeLastWrite.minutes); /* Minutes */
return NO_ERROR;
}