2014-12-23 3 views
0

하나의 열이있는 sqlserver 테이블이 있습니다. Image이 코드를 사용하여 db에서 복구합니다.유니 코드를 더블 바이트로 변환

public static byte[] ObtenerArchivo(string IdArchivo,bool GuardarEnDisco) 
{ 
    byte[] archivo = null; 
    MyContext db = new MyContext(); 
    Double Versiond = 1010; 

    archivo = db.Versiones.Where(x => x.IntIdArchivo == IdArchivo && x.IntIdVersion == Versiond).Select(x => x.BinFisico).First(); 
    return archivo; 
} 

이제 mi 파일을 읽을 수 있도록 변환해야합니다. 이 응용 프로그램은 비주얼 폭스 프로에서 상속 이후이 기능을 변환해야 내 DB에서 파일을 검색 한

**VFP Sintax 
STRCONV(lcImage, 6) 

In VFP help it says: 

Converts character expressions between single-byte, double-byte, UNICODE, and locale-specific representations. 

그리고 6 수단 :

6 Converts UNICODE (wide characters) to double-byte characters. 

이제 내 질문에 내가 할 수있는 방법입니다 C#에서 동일한 conversión을 만드시겠습니까?

EDIT 1 : @ 한스 패스 엔트의 말은 할 수 없습니다. 그리고 그 SQL Image 필드에 텍스트 파일, 이미지, 기본 64 인코딩 파일을 저장했다는 것을 알고 있습니다. C#으로 관리하기 위해 파일을 저장, 검색 및 업데이트하려면 어떻게해야합니까?

+0

* 문자열 *은 바이너리 데이터를 저장하는 데 적합한 유형이 아닙니다. 이러한 데이터는 문자열이 정규화 될 때 손상됩니다. 또한 하나의 대리 문자가 포함되어 있으면 프로그램이 무작위로 중단 될 수 있습니다. VFP 날짜가 훨씬 간단합니다. –

+0

@HansPassant 당신의 도움을 요청합니다. 하지만 지금 C#에서 파일을 처리하려면 어떻게해야합니까? 내가 한 일 : StreamReader를 사용하여 읽은 다음 쌍 바이트 만 가져 오는 자체 문자열을 작성합니다. 그것은 0,2,4,6,8을 얻는다는 것을 의미합니다 .....이 방법으로 나는 원래의 문자열을 얻지 만 실제로 이것은 나를 위해 추악한 소리를 내고 성능이 좋지 않습니다. 아이디어가 있습니까? –

답변

0

@ HansPassant @HansPassant 그의 감사에 대해서는 괜찮 았지만 몇 가지 특별한 조건을 감안할 때 doublé 바이트에서 single byte로 문자열을 변환 할 수 있습니다.

1-VFP는 텍스트 파일을 2 바이트로 변환합니다. 이는 원래 파일이 이고 텍스트가 인 단일 바이트 형식임을 의미합니다.

2 내 파일을 디코딩하려면 vfp가 추가 한 바이트 만 제거하면됩니다. 여기

그리고

코드입니다 :

public async Task<string> GetStringAsync(string IdArchivo) 
{ 
    string FinalData = await Task.Factory.StartNew(() => 
     { 
      string NData = string.Empty; 
      Byte[] BData = GetBinaryData(IdArchivo); 
      string SData = Encoding.UTF8.GetString(BData); 
      for (int i = 0; i < SData.Length; i++) 
      { 
       if (i > 0) 
        i++; 

       if (i <= SData.Length - 1) 
        NData += SData[i]; 
      } 
      return NData; 
     }); 
    return FinalData; 
} 

public Byte[] GetBinaryData() 
{ 

    // Just retrieve the file from my database 
} 

이 였는지를 배열의 모든 홀수 바이트를 제거하고 나는 예상대로 내 문자열을 반환합니다. 네, 너무 빠르지는 않지만 적어도 제 문제를 해결하십시오.