2013-09-10 4 views
0
char tempFilename[256]; 
wchar_t filename[512]; 

fprintf(stdout, "Please enter file name/path: \n"); 
getchar(); 
fgets(tempFilename, 255, stdin); 

MultiByteToWideChar(CP_ACP, 0, tempFilename, -1, filename, strlen(tempFilename)*2); 

if((hReadFile = CreateFile(filename, GENERIC_READ , 0, 0, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) 
{ 
    fprintf(stdout, "File could not be opened, make sure name is under 256 chars. Error Code - %d.\n", GetLastError()); 
    return (0); 
} 

Я проверил, что MultiByteToWideChar() преуспевает.CreateFile() всегда сбой

Infact Я также пробовал путь как C: \ Users \ имя_пользователя \ Desktop \ C test.txt вместо: \ Users \ имя_пользователя \ Desktop \ test.txt

я использую следующие для преобразования \ в \\

while(temp < len) 
{ 
    filename1[cntr1] = tempFilename[temp]; 
    cntr1 += 1; 
    if(tempFilename[temp] == '\\') 
    { 
     filename1[cntr1] = '\\'; 
     cntr1 += 1; 
    } 
    temp += 1; 
} 

это работает до \ to \\. Куда я иду не так ..?

+0

'filename' ?? value –

+0

Я предполагаю, что имя файла имеет CRLF. –

+0

Я не уверен, с какой целью вы конвертируете \ в \\ '. – torak

ответ

4

Распечатайте filename, прежде чем пытаться его использовать. Девять раз из десяти, простой отладочный вывод, подобный этому, покажет вам точную проблему.

И распечатать его с разделителями, так что вы можете увидеть, если у вас есть символ новой строки там:

printf ("[%s]\n", filename); 

(или эквивалентные средства, такие как использование wprintf).

Если есть символ новой строки, вы увидите:

[myfile.txt 
] 

вместо:

[myfile.txt] 

Если вы получаете строку, в которой вы хотите новую строка раздела, вы можете использовать что-то вроде:

int slen = strlen (filename); 
if ((slen > 0) && (filename[slen-1] == '\n')) 
    filename[slen-1] = '\0'; 

(опять же или аналогичный, например, с использованием wcslen).

И по другому вопросу вам не нужно заменять \\\, если вход поступает от пользователя. Экранирование требуется только в самом исходном коде C.

И одна последняя вещь, я не совсем уверен, почему вы звоните getchar(), прежде чем fgets(). - Вы, вероятно, потеряет первый символ все, что вы печатаете в

+1

Виртуальный дополнительный +1 для «* ... распечатать с разделителями ... *"! :-) – alk

+0

Спасибо. Вы были на нем.отредактируйте ответ на wprintf (...) и wcslen (...). – user2705939

+0

см. Отредактированный вопрос – user2705939

Смежные вопросы