Zum Inhalt springen

Kitty82

Mitglieder
  • Gesamte Inhalte

    182
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Kitty82

  1. Hallo ihr, hoffe, ihr könnt mir wieder bei meinem Problem helfen. Ich habe eine fertig geschriebene Andwendung. Jetzt soll ich nachträglich eine Menüleiste einbauen. Nicht mit üblichen "Datei", "Bearbeiten", "Ansicht"... sondern eigentlich nur ein zwei Punkte, die ich selber benenne. Ich weiss dass man Menüs mit hilfe von CMenu erstellen kann, habe aber Probleme bzw. ich weiss nicht wie ich die MenüLEISTE in meine Anwendung bekomme. Muss ich dazu ein besonderes Steuerelement benutzen und es damit zeichnen? Vielen Dank im Voraus! Gruß Kitty
  2. vielen Dank euch beiden für eure Tipps. Hoffe, ich kann euch auch irgendwann mal bei irgendwas so helfen :beagolisc jetzt funktioniert alles und ich hoffe, dass ich nicht bald wieder ein Problem haben werde :cool: Lg Kitty
  3. meintest du das so? path.Format("%s\0",path); so funktioniert es nicht. auch wenn ich das "\" weglasse, geht es nicht. Oder hab ich dich falsch verstanden?
  4. :eek den hab ich total übersehen. moment, werde das gleich mal versuchen!! sorry!!
  5. irgendwie klappt es bei dir immer und bei mir nicht. Habe die Pfade überprüft. Alles stimmt. Habe die Pfade sogar aus Adressenfeld kopiert und dann funktioniert es auf einmal: SHFILEOPSTRUCT FileStruct; FileStruct.hwnd = NULL; FileStruct.wFunc = FO_COPY; FileStruct.pFrom = "C:\\Software\\Projekt Kalibrierung\\Scanner\\Test\0\0"; FileStruct.pTo = "C:\\Software\\Projekt Kalibrierung\\Scanner\\LLS00050123\\\0\0"; FileStruct.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; FileStruct.lpszProgressTitle = "Erstelle Ordner..."; SHFileOperation(&FileStruct);[/PHP] warum auf einmal? :confused: der einzige unterschied ist nur, dass pFrom und pTo keine CString-Variable übergeben bekommen, sondern gleich den Text. path und pathF sind oben bei mir CString-Variablen, denen ich den Pfad so wie hier übergeben habe, also: path = "C:\\Software..." (usw.) wie kann ich denn CString hier übergeben? In dem Thread, wessen link ich oben eingefügt habe, klappte es doch auch mit CString? :confused: Danke + Gruß Kitty
  6. Hallo Zusammen, bevor ihr was sagt. Habe eure Such-Funktion genutzt und habe auch etwas passendes gefunden: http://forum.fachinformatiker.de/showthread.php?t=39377&highlight=Ordner+kopieren Habe versucht dieses Bsp. auch anzuwenden, jedoch habe ich noch Probleme. Ich möchte gern einen Ordner kopieren und ihn dann Umbennenen um eine Datei einzufügen. pathF += "\0\0"; path += "\0\0"; SHFILEOPSTRUCT FileStruct; FileStruct.hwnd = NULL; FileStruct.wFunc = FO_COPY; FileStruct.pFrom = pathF; FileStruct.pTo = path; FileStruct.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; FileStruct.lpszProgressTitle = "Kopiere Ordner..."; SHFileOperation(&FileStruct); Wenn ich es so ausführe, kommt bei mir die Meldung, dass die Datei nicht kpoiert werden kann, da die Quelldatei oder der Quelldatenträger nicht gelesen werden kann. Die Ordner bzw. Dateien sind nicht schreibgeschützt. Habe es auch versucht indem einen Testordner erstellt hab mti ein paar (leeren) Dateien. Da funktioniert es auch nicht. Was muss ich noch berücksichtigen, was ich übersehen habe? Danke für jede Hilfe! Gruß Kitty
  7. hast du ein Glück, das stimmt tatsächlich. :floet: Merci :byby:
  8. heut ist echt nicht mein Tag oder? also hab zuerst SetFilepointer(handle) dann WriteFile danach SetEndOfFiel(handle) und so funktioniert es. Gaaaaanz sicher kanne s dir auch schicken
  9. muss vermeiden, dass die datei geschlossen wird. habe mir gerade das SetFilePosition() angesehen und werde das dann benutzen. SetEndOfFile muss ich dann glaub nach WriteFile aufrufen. Hoffe, es klappt so. WEnn nicht, dann nehm ich deinen Tipp... danke + Gruß Kitty
  10. Du hattest natürlich recht. Das war ja logisch. Ich hatte nicht nur dich durcheinander gebracht sondern mich gleich auch :beagolisc Also, ich öffne die Dateien mit OPEN_EXISTING. Ansonten bleibt aber die Reihenfolge: öffnen & locken -> lesen -> schreiben -> shcließen & entlocken. Das Problem besteht weiterhin. Du meintest wie kann ich soetwas vermeiden? Wie kann ich die Datei leeren (nicht löschen)?
  11. Du hast auch wahrscheinlich recht. Nur verstehe ich nicht, warum es vorhin bei mir ging... und es ging ganz sicher! Nur jetzt hab ich so einen blödsinn gemacht, dass gar nix mehr gescheit läuft. melde mich, falls ich wieder probleme haben sollte. glaub, dann schick ich dir gleich den ganzen code :beagolisc Gruß Kitty
  12. okay, ich muss erstmal mittagspause machen. das programm läuft nun gar nimmer gescheit. muss schauen, was ich zuletzt geändert habe. danke erstmal für deine hilfe. wenn wieder alles so läuft, wie es war und ich hab immernoch fehler, meld ich mich dank dir für deine hilfe :e@sy
  13. ehem :eek ... es funktioniert ... :( :confused: moment, hier mal der Code (damti du dich überzeugen kannst): lockFileHandle = CreateFile(pathForFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(!LockFile(lockFileHandle,0,0,1,0) ) { AfxMessageBox("You can't select this scanner! \nSomeone else is using it! Try later again", MB_ICONINFORMATION | MB_OK); //... ein anderes Gerät wird ausgewählt und //dadurch diese funktion hier ebenfalls. // nur wenn die datei nicht gelocked ist, //wird mit UpdateScannerData weitergemacht } UpdateScannerData(pathForFile); //hier wird überprüft, ob sich die neuen Daten von den alten unterscheiden. und die funktion UpdateScannerData(CString path) sieht dann wie folgt aus: CString text; DWORD r; int pos_blanc =0, end_line =0; //... int fileSize = GetFileSize(lockFileHandle, NULL); char *szInhalt = new char[fileSize]; OVERLAPPED info; info.hEvent = 0;//lockFileHandle; info.Internal = (DWORD)0; info.InternalHigh = (DWORD)0; info.Offset = (DWORD)0; info.OffsetHigh = (DWORD)0; //neue Daten werden von der Datei eingelesen: ReadFile(lockFileHandle, szInhalt, fileSize, &r, &info); das funktioniert. habe ich schon getestet. und nun? bist nun auch fix und fertig?
  14. Du meintest, "Dazu musst du sie doch zwangsläufig nach dem Lesen neu öffnen." um dir zu erklären, warum ich das nicht so mache, hab ich das geschrieben. also ich schließe die datei nicht, bevor ich darein geschrieben habe. öffnen ->locken ->lesen ->schreiben->entlocken & schließen bin im geschäft, dürfen das nicht benutzen. daher wenn, dann erst heute abend so gegen 22uhr. :confused:
  15. entweder verstehst du mich nicht, oder ich habe was falsch verstanden. ich öffne die Datei mit CreateFile. Dort übergebe ich das CREATE_ALWAYS. Dass wenn die Datei geöffnet wird, den Inhalt immer löscht. Nachdem sie geöffnet ist, lese ich die Daten ein. Die Datei bleibt geöffnet/gelockt (Abfrage erfolgt durch if(!LockFile(lockFileHandle,0,0,1,0) )), da in diesem Zeitpunkt niemand darauf zugreifen darf. Wenn z.Bsp. Werte geändert wurden, wird danach gleich wieder in diese (noch offene) Datei geschrieben. Da CREATE_ALWAYS muss diese ja leer sein und somit kann ich mit WriteFile die neuen Werte hineinschreiben. Wenn ich nun die Datei schließe und erneut öffne um darin zu schreiben, kann in diesem kurzen Augenblick jemand darauf zugreifen. Ich hab hier die Angaben, dass dies nie geschehen darf. Daher meine Idee, die Datei solange gelockt zu lassen, bis ich mit dem reinschreiben fertig bin. Wenn das nun soweit alles okay ist, darf er beim Reinschreiben nicht seinen text davorschieben oder anhängen. Oder gilt dann hier in diesem Fall dann das CREATE_ALWAYS nicht mehr?
  16. hm naja fast ich versuche es nochmal zu erklären. ich locke eine Datei mit CreateFile, lese sie aus mit ReadFile, lasse sie geöffnet (gelockt), dann versuche ich mit WriteFile hineinzuschreiben. Dabei entstehen felhler. nicht immer. Ab und zu klappt es obwohl ich immer kontrolliere, was WriteFile übermittelt bekommt und der Buffer ist IMMER richtig gefüllt. Bsp: (vielleicht wird es dadurch klarer?) er soll in die datei "A B C D\n E F G H..." schreiben. Er schreibt: "A B C D\n E F G H...D\n E F G H..." Ab einer bestimmten position schreibt er wieder das gleiche. Widerholt es aber nur 1mal. habe ich es nun besser formuliert? zurückliefern tut WriteFile immer true. //edit: was ich noch vergessen hatte: lpNumberOfBytesWritten hat immer den selben Wert wie nNumberOfBytesToWrite - also müsste das auch okay sein
  17. habe es jetzt nun mit dem FlushFileBuffers vesucht. Erhalte immer true zurück. Jedoch klappt das trotzdem nicht. Ich verzweifle langsam. Weiss nicht woran es liegt. Ich überprüfe jedesmal was WriteFile mit Buffer übergeben wird und es stimmt IMMER, jedoch schreibt er ab und zu falsch raus. Woran kann es denn noch liegen? Wenn doch der inhalt des Buffers zu 1000% stimmt, aber er falsch rausschreibt ... :confused: :confused: hast du eine vermutung??
  18. Aber besser wäre trotzdem SetFilePointer? Ehrlich gesagt, nein. Dachte, da er sie mit CREATE_ALWAYS öffnet, kann da nix mehr drin stehen... okay, werde das dann mal versuchen. meld mich dann wieder. schon mal *DANKE, für deine Hilfe* :byby: !
  19. Danke, klotzkopp für die schnelle Antwort! Werde mir nun mal SetFilePointer ansehen. würde OVERLAPPED nun gar nicht gehen? Habe bei offset ja 0 eingesetzt und somit müsste er doch auch bei 0 anfangen? :confused:
  20. Hallo, ich habe euren Rat befolgt und habe CreateFile bentutz. //... HANDLE hlock = CreateFile(pathFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); mit if(!LockFile(hlock,0,0,1,0) ) überprüfe ich, ob die Datei gelockt ist. Das klappt alles wunderbar! Daher lese ich mit ReadFile die Dateien so ein: int fileSize = GetFileSize(hlock, NULL); char *szInhalt = new char[fileSize]; OVERLAPPED info; info.hEvent = 0; info.Internal = (DWORD)0; info.InternalHigh = (DWORD)0; info.Offset = (DWORD)0; info.OffsetHigh = (DWORD)0; ReadFile(lockHandle, szInhalt, fileSize, &r, &info); Auch hier habe ich keine Probleme. und mit WriteFile die Dateien aus. CString text; //... int fileSize = text.GetLength(); char *Buffer = new char[fileSize]; strcpy(Buffer, text); OVERLAPPED info; info.hEvent = 0; info.Internal = (DWORD)0; info.InternalHigh = (DWORD)0; info.Offset = (DWORD)0; info.OffsetHigh = (DWORD)0; int erfolgreich = WriteFile(hlock, Buffer, fileSize, &w, &info); Diese Datei soll komplett überschrieben werden. Kein "alter" Inhalt mehr vorhanden sein und der neue text somit reingeschrieben werden. hier kurz ne beschreibung, was das programm macht, damit ihr mich evtl. besser versteht: Das PRogramm soll unter anderem Informationen über ein bestimmtes Gerät beinhalten. Diese Informationen stehen immer in einer Datei. Jedes Gerät hat eine Datei. Je nachdem welches Gerät ausgewählt wird, wird die dazugehörige datei geöffnet (und gelockt) und die daten eingelsen um sie dann anschliesend dem benutzer zu anzuzeigen. jetzt können sich einige Werte ändern und der Benutzer kann somit die werte anpassen. Sobald er den neuen wert eingegeben+bestätigt hat, wird dieser wert in die datei geschrieben (WriteFile). daher darf kein alter inhalt mehr vorhanden sein. jetzt ist oft das problem, dass er einfach die Dateien nicht immer vollständig schreibt. Gehe ich mit dem Debug schritt für schritt die gleichen(!) schritte durch, schreibt er es richtig. manchmal kommt es vor, dass er die dateien gleich richtig hineinschreibt. Was noch auftritt ist, dass wenn ich die Daten herausschreibe, er noch alten Inhalt in der datei hat. Sprich das neue wird reingeschrieben und unten drunter, noch etwas altes. gehe ich mit dem debug dort hin und schaue mir an, was er als buffer mitgegeben bekommt, stimmt es. er schreibt es aber trotzdem falsch raus. Woran kann das liegen? dachte mit OVERLAPPED gebe ich ihm an, an welcher stelle er anfangen soll zu schreiben und mit CREATE_ALWAYS, dass er die Datei immer leert. :confused: kann mir bitte hier jemand helfen? wäre für jede hilfe sehr dankbar!!! Danke!!
  21. alles klar. danke nochmals! werde mir dann mal CreateFile ansehen ...
  22. vielen dank für eure schnellen Antworten! kannst du mir kurz sagen was du mit betriebssystemspezifische Funktion meinst?
  23. Hallo Leute, hoffe, ihr könnt mir weiterhelfen. Habe folgenden code: //... #include "time.h" #include "fstream" #include "string" using namespace std; void Bla::Func1() { ofstream read_out; //... read_out.open(path, ios::out, filebuf::sh_none); read_out << "Text"; read_out.close(); }[/PHP] Jedoch stimmt bei diesem Code irgendwas nicht. Er bringt mir immer die Fehlermeldungen: error C2039: 'sh_none' : Ist kein Element von 'basic_filebuf<char,struct std::char_traits<char> >' error C2065: 'sh_none' : nichtdeklarierter Bezeichner und zeigt mir die Zeile, worin filebuf::sh_none drin steht. Was hab ich vergessen? Habe filebuf::sh_none deshalb gewählt, damit wenn die Datei so geöffnet wird, jemand anderes -wenn er diese datei ebenfalls öffnen will- nix ändern kann (schreibgeschützt). Danke schon im Voraus, Gruß Kitty
  24. Hallo ihr, habe follgendes Problem, wo ich einfach nicht durchsteigen kann. Und zwar hab ich ein Programm geschrieben. Ein Mitarbeiter hat es testen wollen und bei ihm sind immer andere Ergebnisse erschienen als wie bei mir. Habe dann durch prüfen festgestellt, dass mein Programm im Debug eine Datei richtig einliest, jedoch in der Releaseversion das nicht macht. Also die Datei, die einzulesen ist, besteht aus mehreren (Zahlen)Werten. Ich lese sie Zeile für Zeile mit getline() ein: getline(read_in18, line_18, '\n'); getline(read_in90, line_90, '\n');[/PHP] Wenn nun der erste Wert der Zeile -1 ist, soll diese komplette(!) Zeile nicht gespeichert werden. Die Debugversion igoniert diese Zeile und speichert die nächste ab, so wie es sein soll. Die Releaseversion ignoriert die -1, jedoch liest er dann die Zahl ein, die danach folgt. Warum er nicht ebenfalls diese Zeile überspringt, kann ich nicht nachvollziehen. Hier erstmal der Code wie das mit dem einlesen bei mir aussieht (kurze Erklärung unten): [PHP] while(line_18 != "" || line_90 != "") { //Dateien 18 und 90 können unterschiedlich lang sein if(line_18 != "" && line_90 != "") { FillDaten(pDaten18, line_18, 18); FillDaten(pDaten90, line_90, 90); if(pDaten18->dReal >= 0) vecDaten[0].push_back(*pDaten18); if(pDaten90->dReal >= 0) vecDaten[1].push_back(*pDaten90); } else { if(line_18 != "") { FillDaten(pDaten18, line_18, 18); if(pDaten18->dReal >= 0) vecDaten[0].push_back(*pDaten18); } else { FillDaten(pDaten90, line_90, 90); if(pDaten90->dReal >=0 ) vecDaten[1].push_back(*pDaten90); } } getline(read_in18, line_18, '\n'); getline(read_in90, line_90, '\n'); } FillDaten() = die komplette Zeile, die eingelesen wurde, wird hier auseinander "gepflückt". Die ganzen Werte werden dort Variablen/Objekte zugewiesen. dReal ist der Wert, der nie kleiner als Null (-1) sein darf. Wenn es so ist, soll es nicht in dem Vector gespeichert werden. Kann mir hier jemand helfen und erklären warum die Releaseversion anders handelt?? Danek + Gruß
  25. ja die IDE-Kabel schon kontrolliert und ausgetauscht sogar ... was meinst du mit Cable Select .... Master und Slave? :confused:

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...