Problem bei Datei Lesen



  • hier erstemal mein code;

    // Entwurf 1Dlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "Entwurf 1.h"
    #include "Entwurf 1Dlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CEntwurf1Dlg dialog
    
    CEntwurf1Dlg::CEntwurf1Dlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CEntwurf1Dlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CEntwurf1Dlg)
    		// NOTE: the ClassWizard will add member initialization here
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CEntwurf1Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CEntwurf1Dlg)
    		// NOTE: the ClassWizard will add DDX and DDV calls here
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CEntwurf1Dlg, CDialog)
    	//{{AFX_MSG_MAP(CEntwurf1Dlg)
    	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
    	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CEntwurf1Dlg message handlers
    
    BOOL CEntwurf1Dlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    
    	CenterWindow(GetDesktopWindow());	// center to the hpc screen
    
    	// TODO: Add extra initialization here
    
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    void CEntwurf1Dlg::OnButton2() 
    {
    
    	char Read(128);		
    	char str[100];
    //	unsigned short* a = (unsigned short *) "\\My Documents\\data.txt";
    
    	CFile datei((unsigned short *) "\\data.txt", CFile::modeRead);
    	datei.Read(str, sizeof(str));
    	datei.Open((unsigned short *) "\\data.txt",NULL,NULL);
    	datei.Close();
    }
    
    void CEntwurf1Dlg::OnButton1() 
    {
    
    	char Write(128);
    	char str[100];
    //	unsigned short* a = (unsigned short *) "\\My Documents\\data.txt";
    
    	CFile datei((unsigned short *) "\\data.txt", CFile::modeWrite);
    	datei.Write(str, sizeof(str));
    	datei.Open((unsigned short *) "\\data.txt",NULL,NULL);
    	datei.Close();
    	try
    	{
    		CFile datei((unsigned short *) "\\data.txt", CFile::modeWrite);
    		datei.Write(str, sizeof(str));
    		datei.Close();
    	}
    	catch(CFileException *e)
    	{
    		if (e->m_cause == CFileException::fileNotFound)
    			printf("Datei wurde nicht gefunden\n");
    		e->Delete();		
    	}
    }
    

    wennsch dann jetzt das programm übertrage. es startet aber sobald ich auf einen button klicke, kommt nur das hier

    ΠΠΠΠΠt was not found

    und warum bitteschön, müsste doch eiegntlich gehen. die datei habsch auch mal auf dummen dunnst mit in den ordner gepackt. auf dem gerät is sie sowieso.

    meine umgebung:
    embedded visual c++ 4.0
    windows ce 4.2

    vielen dank für die hilfe



  • Dein Versuch, String-Literale per Cast ( (unsigned short *) "..." ) als UNICODE-Strings umzudeuten, ist schon im Ansatz zum Scheitern verursacht - verwende lieber gleich wide-Strings ( TEXT("...") oder L"..." ) verwenden.

    (lass mich raten - die Cast's hast du eingebaut, nachdem der Compiler auf fehlende Konvertierungen von char[...] nach unsigned short* aufmerksam gemacht hat)



  • meinst du mit den casts diese teile hier (//) wenn ja, nein hab ich nicht. bei mir kommt kein fehler, also das programm lässte sich komplett debugen.
    hab nur gedacht vielleicht liegt es an dem pfad oder so.

    kannst mit das mal mit den wide-strings anhand meines codes zeigen. bin noch absoluter neuling in c++. wäre echt der hit



  • Das ist ein cast:

    (unsigned short *)
    

    Und du sollst mal das versuchen:

    CFile datei(TEXT("\\data.txt"), CFile::modeWrite);
    

    Wobei ich mir die Frage stelle, wo die Datei relativ zu deiner Exe gesehen liegt.

    \\datei.txt kommt mir so falsch vor.
    .\\datei.txt wäre das aktuelle Verzeichnis und ..\\datei.txt das darüber.
    Aber was ist \\datei.txt?



  • estartu schrieb:

    Das ist ein cast:

    (unsigned short *)
    

    Und du sollst mal das versuchen:

    CFile datei(TEXT("\\data.txt"), CFile::modeWrite);
    

    Wobei ich mir die Frage stelle, wo die Datei relativ zu deiner Exe gesehen liegt.

    achso, das ist ein cast. naja wieder was dazugelernt 🙂

    \\datei.txt kommt mir so falsch vor.
    .\\datei.txt wäre das aktuelle Verzeichnis und ..\\datei.txt das darüber.
    Aber was ist \\datei.txt?

    das ist auch falsch, meine natürlich den gleichen pfad wie ich den bei der einen zeile auskommentiert habe. sorry mein fehler



  • wenn ich jetzt aus der txt datei etwas zeilenweise auslesen möchte, wie realisere ich das



  • Schau mal, ob CStdioFile bei dir geht. 🙂


  • Mod

    1. TEXT("abc") ist kein cast, sondern ein Makro, der einen Unicode String aus der Konstante macht. Besser man verwendet _T!
    2. "\\datei.txt" öffnet die Datei datei.txt im Rootverzeichnis der Festplatte die durch das current working sdirectory definiert wird.
    3. ".\\datei.txt" öffnet nicht die Datei in dem Verzeichnis in dem die EXE steht, sonder die Datei im current working directory!



  • Martin Richter schrieb:

    1. TEXT("abc") ist kein cast, sondern ein Makro, der einen Unicode String aus der Konstante macht. Besser man verwendet _T!

    Wieso hast du dann oben TEXT genannt? Ich dachte, du hättest dir dabei was gedacht und habe es daher verwendet. (Könnte ja sein, dass _T bei embedded nicht geht.)



  • jep CStdioFile das funktioniert.
    muss ich dann mal kucken wie das funktioniert damit. oder kannst du mir das vielleicht sagen.




  • Mod

    estartu schrieb:

    Martin Richter schrieb:

    1. TEXT("abc") ist kein cast, sondern ein Makro, der einen Unicode String aus der Konstante macht. Besser man verwendet _T!

    Wieso hast du dann oben TEXT genannt? Ich dachte, du hättest dir dabei was gedacht und habe es daher verwendet. (Könnte ja sein, dass _T bei embedded nicht geht.)

    Verwechselst Du mich mit CStoll?
    Ich habe nur einmal geantwortet bisher
    Grundsätzlich empfehle ich nie TEXT. Ich rate immer zu den T-Makros.

    tchar.h gibt es auch in Embedded...



  • _T ist doch das selbe wie TEXT oder nicht???


  • Mod

    Es hat eine ähnliche Funktion. Nur ist das eine CRT verankert und das andere im Windows SDK. Es ist in keinem Fall das selbe!

    So reagiert TEXT auf das define UNICODE und _T auf den define _UNICODE.
    🙂
    Ich verwende lieber konsisten dir CRT Variante.

    Siehe dazu auch:
    http://blog.m-ri.de/index.php/2007/05/31/_unicode-versus-unicode-und-so-manches-eigentuemliche/
    Nett nicht.



  • Martin Richter schrieb:

    Verwechselst Du mich mit CStoll?

    Oh ja, entschuldige.

    Mir ist _T lieber... man ist ja faul. 😉



  • hätte da mal noch ne frage, ich will sagen (durch ein editfeld) was in die txt datei geschrieben wird. müsste ich ja eigenlich nur ne variable deklarieren und der die edit box zuweisen. habs probiert aber funktioniert nicht (statts str ein a eingefügt und dann = idc_edit1), warum?!
    genau das gleiche will ich bei dem lesen machen, also es soll halt in dem editfeld stehen!?
    vielen dank für die bisherige hilfe*thx*



  • hab mir auch grad mal die datei angekuckt, also schreiben scheint zu funktionieren. aber in der datei stehen jetz nur wieder irgendwelche zeichen. nichts von text oder so


Anmelden zum Antworten