datei einlesen
-
da aufzuhören geht ja, aber dann klappts mit dem weiterlesen eben nicht
-
Weil? Code?
-
Du machst einfach genau das gleiche wie beim ersten Teilstück!
-
Entweder merkst du dir die Position und springst dann dort wieder hin oder läßt den Dateihandle offen.
-
das ist die funktion zum einlesen in c (die ist nicht von mir sondern schon in einem Program enthalten was ich ändern soll), hier wird genau ein datenblock eingelesen.
aber wenn ich nur das close() weglasse und diese funktion erneut aufrufe klappt das nicht.void Einlesen3D(char *Name) { fp2=fopen(Name, "r"); //einlesen anzahl Dreiecke und Knotenpunkte fscanf(fp2,"%i %i", &AnzahlDreiecke, &AnzahlKnotenpunkte ); //einlesen von Topologie der dreiecke for(int i=0; i<=AnzahlDreiecke-1; i++) fscanf(fp2, "%i %i %i %i",&Dreiecke[i][0], &Dreiecke[i][1], &Dreiecke[i][2], &Dreiecke[i][3] ); //einlesen von koordinaten for(int i=0; i<=AnzahlKnotenpunkte-1;i++) fscanf(fp2,"%i %e %e %e", &a[i], &x[i], &y[i],&z[i]); //fclose(fp2); }
-
gast555 schrieb:
aber wenn ich nur das close() weglasse und diese funktion erneut aufrufe klappt das nicht.
Könnte dran liegen, dass die Datei zuerst geschlossen werden muss, bevor sie wieder geöffnet werden kann.

In C++ gibt es übrigens
std::fstream, damit kann dir sowas nicht passieren, weil der Destruktor die Datei automatisch schliesst.
-
ich wollte mit möglichst wenig aufwand, den code anpassen, wenn ich die datei wieder schließe ist doch auch die aktuelle position weg, wäre es möglich diese mit tellg() in eine globale variable zu schieben?
-
... dann wirst du ein Problem damit bekommen wenn du unterschiedliche Dateien lesen willst. Daher wäre es wenn sinnvoller statt dem Dateinamen den Filehandle zu übergeben und diesen außerhalb der Methode zu sichern. Oder die Funktion gibt die Stelle zurück an der sie aufgehört hat zu lesen und du übergibst ihr als zusätzlichen Parameter (mit Defaultwert 0) die letzte Position.
Gibt viele Möglichkeiten.
-
ok, wie kann ich die aktuelle position als returnwert bekommen?
return tellg();???
das geht ja so bestimmt nicht
-
kann mir bitte jemand noch einen tip geben, ich bekomme es nicht hin

-
oder ein Beispiel zeigen????? hilfe
-
-
bool CChipDoc::GetFileInfo() { std::fstream InputFile; bool found = false; char cc; InputFile.open(m_sFileName, std::ios_base::binary | std::ios::in | std::ios::out); if( !InputFile ) { std::cout << "Error opening input stream" << std::endl; return false; } m_nHeaderLength = 0; while( (cc = InputFile.get()) != InputFile.eof() && !found) { if(cc == 80) { found = true; break; } m_nHeaderLength++; } m_nLineLength = 2; while((cc = InputFile.get()) != InputFile.eof() && cc != 10) { m_nLineLength++; } InputFile.close(); return true; } bool CChipDoc::WritePadToFile(CPad* pPad) { // CChipType* pChip = (CChipType*) m_pBondType; // ASSERT (pChip != NULL); std::fstream InputFile; CString NL = "\r\n"; InputFile.open(m_sFileName, std::ios_base::binary | std::ios::in | std::ios::out); if( !InputFile ) { std::cout << "Error opening input stream" << std::endl; return false; } //random string anlegen... hauptsache zeilenlänge stimmt... InputFile.seekp(m_nHeaderLength + Name*m_nLineLength); InputFile.write(str, m_nLineLength-1); InputFile.close(); return true; }was einfacheres habsch gerad nicht da. sry. kompiliert aber xD