2009-11-16 6 views
1

저는 여기 새로워 영어가 제멋대로입니다. 불편을 끼쳐 드려 죄송합니다.Windows Mobile에서 기본 코드가있는 파일을 읽는 중 오류가 발생했습니다.

Windows Mobile 용 응용 프로그램을 원시 코드 (MFC)로 프로그래밍하고 있습니다. 나는 파일을 열려고하는데, 이것이 나를 미치게 만든다. 나는 ... 천 개의 다른 방법으로 엽니 다 해봤 그리고 난 정말 그것을 달성,하지만 난 어떤 설명없이 (fread 또는 getline) 프로그램 충돌을 읽으려고 할 때 :

The program 'x' finalize with code 0 (0x0) 

GetLastError() 방법, 그것은 모든 경우의에 입력

std::wifstream file(L"\\Archivos de programa\\Prog\\properties.ini"); 
wchar_t lol[100]; 
if (file) { 
    if(!file.eof()) {    
     file.getline(lol,99); 
    } 
} 

만의 getline 충돌 : 어떤 경우에, 그런 나에게 183

를 반환, 내가 파일을 여는 데 사용했던 코드를 삽입.


FILE * lol = NULL; 
lol = _wfope n(ruta, L"rb"); 
DWORD a = GetLastError(); 
if (lol != NULL) 
    return 1; 
else 
    return -1; 

그것은 1 (올바른)를 반환하고, 이후는, 이후의 getline에있어서, 상기 문자열에 쓰레기를 저장한다. 그러나, 그것은 충돌하지 않습니다 !!


fp.open (ruta, ifstream::in); 
if (fp.is_open()) {  
    return 1; 
}else{   
    return -1; 
} 

이것은 리턴 1에 입사하지만, 이후의 getline을 실행할 때() 충돌.

나는 getline() 방법을 디버깅했습니다 그것은 바로 거기, 라이브러리 fstream에 충돌 :

if ((_Meta = fget c (_File)) == EOF) 
    return (false); 

을 경우에. fgetc(), 나는 고집한다.

나는 완전히 미쳐 가고 있습니다! 나는 약간의 단서가 필요하다, 제발!
파일 경로가 정확합니다. 첫째, 이론적으로, 메소드가 파일을 열고, 두 번째로, 나는 경로를 dinamically 얻습니다.

fread 방법도 충돌하는 것을 강조하십시오.

미리 감사드립니다.

PS :
내가 어떤하면 fopen을 수행 할 때, 메소드 fp.good은() 나 FALSE 반환하는 말, 내가 fp.fopen(path, ifstream::in); 또는 std::wifstream fp(path);를 사용하는 경우 GetLastError가, 다른 한편으로 나에게 183을 반환 fp.good(); 나에게 TRUE을 반환 , GetLastError()은 오류 (0)를 throw하지 않습니다.

답변

0

힌트 : Process Monitor 도구를 사용하여 파일 시스템 호출에서 잘못된 점을 확인하십시오. 당신이 자신을 절약 할 수 있습니다 외에도 스트림 문제 자체에서

(내가 무엇을 ruta 변수 포인트 모른다) :

wifstream에 의해 허용 경로

는 드라이브 (등 "C")을 부족 Windows .ini 파일을 사용할 때 GetProfileString 및 관련 기능을 사용하면 많은 문제가 발생합니다.

+0

사실 내 응용 프로그램이 Windows Mobile 용으로 프로그래밍되어 있습니다. Windows Mobile에는 드라이브가 없으며 현재 디렉토리에 대한 아이디어가 없습니다. 다른 점은 그것이 지원되지 않기 때문에 GetProfileString을 사용할 수 없다는 것입니다. 내 응용 프로그램을 모든 창 모빌과 호환되도록 Pocket PC 2003 SE 용으로 프로그래밍하고 있습니다. Windows Mobile 응용 프로그램에서 실행되지 않는다고 생각하기 때문에 프로세스 모니터를 사용할 수 없습니다. 'ruta '는 경로의 synonim입니다. 그리고 .ini 파일의 경로가 저장됩니다. 고맙습니다, xtofl. 그리고 내 게시물을 편집 해 주신 gf에게 감사드립니다. – Newlog

+1

Windows Mobile 용 프로세스 모니터가 없습니다 ... 아니면 틀렸습니까? 있을 경우 링크를 게시 해주십시오. 나는 항상 그런 툴을 원했다. (내 자신을 쓸만큼 열심히는 아니지만) – atzz

0

여기 어두운 곳에서 촬영하고 있지만 설명이 런타임 불일치 이야기처럼 들립니다.MFC와 프로젝트가 동일한 런타임 링크 모델 (정적/동적)을 사용하는지 확인하십시오. MFC에 동적으로 링크하면 제한이 더 엄격합니다. MFC와 프로젝트 모두 동적 런타임을 사용해야합니다. ...

프로그래밍 신비를

0

나는 이유는 모르겠지만 개의 cfile 클래스와 ... 그것을 작동합니다!

+0

내 생각 엔 텍스트 파일이 UTF-8로 인코딩되었지만 충돌 한 함수는 유니 코드 UTF-16 변형이다. 그리고 CFile 아마 자동으로 그들을 변환 .. u는 텍스트 모드/이진 모드에서 파일을 열어 봤어? –

+0

자세한 내용을 입력하고 직접 답변을 수락하거나 문제가 해결되면 다른 대답을 수락해야합니다. – Matthieu

0

어둠 속에서도 촬영하십시오. MFC에서 설명 할 수없는 임의 크래시는 종종 불일치 메시지 처리기 프로토 타입에서 비롯됩니다. 예를 들어 다음 코드는 잘못하지만 컴파일하는 동안 경고를 생성하지 않습니다 그것은 대부분의 시간을 작동 할 수 있습니다 : 여기

ON_MESSAGE(WM_LBUTTONDOWN, onClick) 
... 
void onClick(void) //wrong prototype given the macro used (ON_MESSAGE) 
{ 

//do some stuff 

} 

이 프로토 타입이 있어야합니다 : 그것은 자주 발생

LRESULT onClick(WPARAM, LPARAM) 
{ 
} 

사람들이 메시지 맵을 수동으로 수정하기 시작할만큼 충분히 자신감을 갖게되면

관련 문제