Problem: Datei lässt sich nicht öffnen, obwohl vorhanden...



  • Das ist mein code ( vereinfacht )
    mit ueberpruefedatei() soll einfach kontinuierlich die datei ausgelesen werden

    #include <windows.h>
    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <string>
    #include "Shlwapi.h"
    #pragma comment (lib, "shlwapi.lib")
    using namespace std;
    
    char dlldir[MAX_PATH];
    int CH_use = 0;
    
    void ueberpruefedatei()
    {
    	ifstream in;	
    	in.open(strcat(dlldir, "\\Settings\\tmp_settings.txt"), ios_base::in);
    	if ( !in )
    		MessageBox(NULL, "Das ist schlecht!", "Datei lässt sich nicht öffnen", MB_OK);
    	while ( true )
    	{
    		in >> CH_use;
    	}
    }
    
    // ...
    
    BOOL APIENTRY DllMain( HMODULE hModule, DWORD reason, LPVOID lpReserved )
    {
    	switch(reason)
    	{
    		case DLL_PROCESS_ATTACH: 
    			DisableThreadLibraryCalls( hModule );
    			GetModuleFileNameA(hModule, dlldir, sizeof(dlldir));
    			PathRemoveFileSpec(dlldir);
    			MessageBox(NULL, strcat(dlldir,"\\Settings\\tmp_settings.txt"), "TEST", MB_OK);
    			CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ueberpruefedatei, 0, 0, 0);
    			break;
    	}
    	return TRUE;
    }
    

    Der Pfad wird richtig in der msgbox angegeben, doch er kann sie nicht öffnen, also es kommt die messagebox:

    if ( !in )
    		MessageBox(NULL, "Das ist schlecht!", "Datei lässt sich nicht öffnen", MB_OK);
    

    die datei IST vorhanden!
    (wurde ca. 10 mal geprüft 🕶 )

    wäre dankbar für hilfe 🙂

    gruß



  • *Hochschieb*

    Weiß denn niemand was? 😞



  • ZeroM schrieb:

    ...wäre dankbar für hilfe :)...

    1. Wäre ich dankbar wenn man sich das richtige Unterforum vorher heraussuchen würde (Der Code hat mit ANSI C++ sogut wie garnichts zu tun).
    ==> Gehört wohl in das WinAPI Forum
    2. Ist dies ein Forum nicht ein Chat, und "Hochschieben" gilt als Unsitte.

    Würde ein Moderator bitte den Thread verschieben?



  • asc schrieb:

    ZeroM schrieb:

    ...wäre dankbar für hilfe :)...

    1. Wäre ich dankbar wenn man sich das richtige Unterforum vorher heraussuchen würde (Der Code hat mit ANSI C++ sogut wie garnichts zu tun).
    ==> Gehört wohl in das WinAPI Forum
    2. Ist dies ein Forum nicht ein Chat, und "Hochschieben" gilt als Unsitte.

    Würde ein Moderator bitte den Thread verschieben?

    Es wäre nett von dir, wenn du mir sagen würdest in welches Forum ich hätte eigentlich posten müssen...

    Als beschreibung für dieses forum steht:

    Fragen zu bestimmten Funktionen und Abläufen in C++ (nach dem ISO-Standard), damit man mal erfährt, was pure virtual bedeutet, oder wie das mit den Templates und der STL geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!

    Das scheint für mich relativ richtig zu sein...



  • ZeroM schrieb:

    void ueberpruefedatei()
    {
    ifstream in;
    in.open(strcat(dlldir, "\\Settings\\tmp_settings.txt"), ios_base::in);
    if ( !in )
    MessageBox(NULL, "Das ist schlecht!", "Datei lässt sich nicht öffnen", MB_OK);
    while ( true )
    {
    in >> CH_use;
    }
    }

    die datei IST vorhanden!
    (wurde ca. 10 mal geprüft 🕶 )

    Lass mal das CurrentDirectory anzeigen. Oder gib versuchsweise den vollständig qualifizierten Pfad zur Datei an. Vielleicht läuft Dein Prozess nicht in dem Verzeichnis, von dem aus mit diesem relativen Pfad die Datei erreicht werden kann.



  • @asc: Sein Code im Ganzen ist vielleicht kein ANSI C++, sein Problem hingegen schon. Immerhin scheitert er ja am ifstream. Also, nicht so kleinlich sein.

    @ZeroM: Gib mal den kompletten Pfad incl. Laufwerksbuchstaben an.



  • Belli schrieb:

    ZeroM schrieb:

    void ueberpruefedatei()
    {
    ifstream in;
    in.open(strcat(dlldir, "\\Settings\\tmp_settings.txt"), ios_base::in);
    if ( !in )
    MessageBox(NULL, "Das ist schlecht!", "Datei lässt sich nicht öffnen", MB_OK);
    while ( true )
    {
    in >> CH_use;
    }
    }

    die datei IST vorhanden!
    (wurde ca. 10 mal geprüft 🕶 )

    Lass mal das CurrentDirectory anzeigen. Oder gib versuchsweise den vollständig qualifizierten Pfad zur Datei an. Vielleicht läuft Dein Prozess nicht in dem Verzeichnis, von dem aus mit diesem relativen Pfad die Datei erreicht werden kann.

    Danke dir, jetzt habe ich bemerkt, dass das Problem die MessageBox am anfang war. Dor hat nämlich strcat den Pfad schon einmal zusammengesetzt und deswegen wurde beim 2ten mal noch etwas angehängt und es sah etwa so aus:

    C:\...\Settings\tmp_settings.txt\Settings\tmp_settings.txt
    

    Edit auch dir MiP, habe deinen Post zu spät bemerkt


Anmelden zum Antworten