2012-10-28 111 views
0

爲什麼下一個代碼會給出錯誤?看代碼和圖片。如何修復 enter image description here讀取unicode文件

wchar_t *GetLine(wchar_t *fileName=L"indexing.xml", wchar_t endSymbol = '\n') 
{ 
    FILE *file = NULL; 
    int sz; 
    _wfopen_s(&file, fileName, L"r"); 
    std::wifstream fs (file); 
    int size; 
    wchar_t wchr[1]; 
    size = 0; 
    do 
    { 
     sz = fread(&wchr,sizeof(wchar_t),1,file); 
     if(!sz) 
     { 
      break; 
     } 
     tempGetLine[size] = wchr[0]; 
     size++; 
    }while(wchr[0] != endSymbol); 
    tempGetLine[size] = '\0'; 
    position += (size); 
    fs.close(); 
    return tempGetLine; 
} 

但這項工作正確

wchar_t *GetLine(wchar_t *fileName=L"indexing.xml", wchar_t endSymbol = '\n') 
{ 
    hReadFile = CreateFileW(L"indexing.xml",GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    SetFilePointer(hReadFile,sizeof(wchar_t) * position, NULL, FILE_BEGIN); 
    int size; 
    wchar_t wchr[1]; 
    DWORD dw; 
    size = 0; 
    do 
    { 
     ReadFile(hReadFile, wchr, sizeof(wchar_t), &dw, NULL); 
     if(!dw) 
     { 
      break; 
     } 
     tempGetLine[size] = wchr[0]; 
     size++; 
    }while(wchr[0] != endSymbol); 
    tempGetLine[size] = '\0'; 
    position += (size); 
    return tempGetLine; 
} 

enter image description here 的完整代碼

#include "stdafx.h" 
#include <fstream> 
#include <iostream> 
#include <stdio.h> 
#include <cstdio> 
#include <Windows.h> 
int position = 0; 
wchar_t tempGetLine[500]; 
wchar_t *GetLine(wchar_t *fileName=L"indexing.xml", wchar_t endSymbol = '\n') 
{ 
    FILE *file = NULL; 
    int sz; 
    _wfopen_s(&file, L"C:\\indexing.xml", L"r"); 
    std::wifstream fs (file); 
    int x = GetLastError(); 
    fseek(file,sizeof(wchar_t) * position,SEEK_SET); 
    int size; 
    wchar_t wchr[1]; 
    size = 0; 
    do 
    { 
     sz = fread(&wchr,sizeof(wchar_t),1,file); 
     if(!sz) 
     { 
      break; 
     } 
     if(wchr[0] >= L'А')continue;   //Only for console application 
     tempGetLine[size] = wchr[0]; 
     size++; 
    }while(wchr[0] != endSymbol); 
    tempGetLine[size] = '\0'; 
    position += (size); 
    fs.close(); 
    return tempGetLine; 
} 
+0

哪條線是102線? – hyde

+0

@hyde line 102在Microsoft C運行時。 – john

+0

@hyde會在fread.c庫中的第102行;這個問題不重要。 –

回答

1

您的文件無法打開因爲某些原因和file爲NULL。 總是檢查文件是否打開。

也想知道你在用fs在做什麼。

+0

爲什麼是NULL?文件存在於文件系統中。我的代碼有什麼問題? – abilash

+0

我不知道。你打開文件的方法很不尋常。但是文件無法打開的原因很多。最常見的是,程序正在尋找文件的地方不是你認爲它的地方。 – john

+0

路徑正確。查看問題 – abilash

0

您正在查看當前目錄下的文件indexing.xml

VC項目的默認值是當前目錄設置爲exe文件的目錄2012\Projects\FindPattern\Debug。該文件不在那裏,它是一個文件夾。

+0

的版本其實文件在文件夾2012 \ Projects \ FindPattern \ FindPattern(查看快照)。我已經查過了。感謝您的回覆。 – abilash