2014-09-17 2 views
1

STM32 마이크로 컨트롤러를 사용 중이고 USB OTG 드라이브에 파일을 쓰려고합니다. 나는 f_open 기능을 사용하고 있는데이 변수에 이름의 폴더에 파일을 작성하는 것입니다 내가 지금 원하는변수의 f_open 디렉토리 이름

if(f_open(&fileW, "0:\\Folder\\INFO.TXT",FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) 
    { ...writing the file... 
    } 

처럼 잘 작동합니다. '나는 또한 수동으로 두 번째 시도에서 '\0'을 추가하려고

uint8_t PathString[17] = {0}; 

sprintf(PathString,"0:\\%s\\INFO.TXT", FolderName); 
if(f_open(&fileW, PathString, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) 
    { ...writing the file... 
    }  

하지만 방법 중 어느 것도 작동하지 내가 할 수있는이 같은

if(f_open(&fileW, ("0:\\%s\\INFO.TXT", FolderName), FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) 
    { ...writing the file... 
    } 

또한 :

나는 이런 식으로 뭔가를 시도 if 상태가됩니다. 내가 뭘 놓치고 있니? 고맙습니다! 당신이 FatFs 파일 시스템을 사용하는 경우

+0

PathString [17]은 데이터를 저장하기에 충분합니까? –

+0

@Jayesh 예 - 매우 작은 FolderName이어야합니다 :) –

+0

당신은'FatFs' API를 사용하고 있습니까? –

답변

0

타자 같은 유형 TCHAR에 최종 문자열을 변환 할 snprintf

int len = strlen(FolderName)+strlen("0:\\\\INFO.TXT")+1; 
char PathString[len]; 
snprintf(PathString,len,"0:\\%s\\INFO.TXT", FolderName); 

을 다음 한 사용

TCHAR str[len], *t = str; 
char *s = PathString; 

while(*s) 
*t++ = (TCHAR)*s++; 

*t = 0; 

그런 후 f_open

if(f_open(&fileW, str, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) 
{ 
    //do something 
} 
+0

감사합니다.이 유형 변환 문제에 대해 알고 싶지 않습니다. 변환에서 시작하여 일부 테스트를 수행하고 있습니다 (완전히 이해할 수는 있지만 완전히 이해하지 못함).하지만 불행히도 작동하지 않으며 if 조건에 아직 들어 가지 않습니다. – LoriB

+0

가장 좋은 결과는 int len ​​= strlen (FolderName) + strlen ("0 : \ INFO.TXT") + 1; 및 snprintf (PathString, len, "0 : \ % s \ INFO.TXT", FolderName); 각 줄에서 2 '\'를 제거합니다. 이들은 루트 디렉토리에 "FoldernameINFO.txt"라는 이름의 파일을 만듭니다. 즉, TCHAR 변환과 f_open 함수가 작동하지만 올바른 폴더 경로를 얻는 방법을 알지 못합니다. – LoriB

+1

"\\"(또는 "\"라고 말해야합니다)의 TCHAR char-to-char 변환에 문제가있을 수 있습니까? – LoriB