C#.NET Q&A

C# 코드변환 확인부탁드립니다. 훈닷넷 평점: 없음 조회: 142

1.

long address;

long returnbytes;

//(address+returnbytes)==size

char buffer[8192];

fp = fopen(filename, "rb");

size = ftell (fp);

fseek(fp, address, SEEK_SET);

result = fread (buffer, 1, returnbytes, fp);

 

2.

FileStream fs = File.OpenRead(filename);

byte[] buffer = File.ReadAllBytes(filaname);

size = buffer.Length;

fs.Seek(0, SeekOrigin.Begin);
result = fs.Read(buffer, 0, buffer.Length);

 

1번 코드를 C#인 2번 코드로 바꿨는데요.

프로그램을 실행하면 잘못 실행이 됩니다.

result 부분에서 문제가 있는거 같은데 어떻게 바꿔야 할지 아시는분 알려주세요ㅠ

태그 : C#
작성자 정보
훈닷넷
Level 8
 [EXP.13/14]

메일:  비공개
글등록 +12 60 덧글등록 +3 21
자기소개
안녕하세요
글 공유하기 |
  tweet facebook
2018-06-11 오전 9:38:21
나도한마디
사용자
스포너            [2018-06-11]
Level 22
 [EXP.45/50]
첫번째 C코드는 해당 파일에서 address의 위치에 returnbytes만큼 읽어 buffer에 저장하는 코드입니다.

두번째 C#코드는 모든 파일의 데이터를 읽어 길이를 구한 후 다시 파일의 모든 데이터를 읽는건데... 이상하지요?

첫번째 코드에서 size를 어디다 쓰는지는 모르겠지만, address와 resultbytes만 보면 간단합니다
resultbytes만큼만 byte배열을 생성한 후 fs.Read(buffer, address, resultbytes)
사용자
훈닷넷            [2018-06-11]
Level 8
 [EXP.13/14]
size는 단순히 파일 크기를 읽어오는겁니다.

저도 그렇게 생각하고 했는데 address와 returnbytes를 입력하면
할당되지 않는 지역변수를 사용했다고 나옵니다.

C코드는 가능한거 같은데 C#은 안되더라구요.
이럴땐 어떻게 해야하나요?
사용자
스포너            [2018-06-11]
Level 22
 [EXP.45/50]
그럼 C 코드가 잘 못된 것입니다.

공유된 C 코드에서는 address 설정이 없습니다. 그런데, fseek에 long offset을 제정하는데 사용됩니다.

마찬가지로 returnbytes도 초기화ㅇ 없이 fread의 sizt_t count에 사용됩니다.
사용자
훈닷넷            [2018-06-11]
Level 8
 [EXP.13/14]
resultbytes만큼만 byte배열을 생성한다는게 무슨 말일까요?
사용자
스포너            [2018-06-11]
Level 22
 [EXP.45/50]
2번 C# 코드 중 파일의 전체를 버퍼로 얻는게 아니라

byte[] buffer = File.ReadAllBytes(filaname);

var buffer = new byte[resultbytes]; 후
fs.Read(buffer, ...)
하라는 것입니다
사용자
훈닷넷            [2018-06-11]
Level 8
 [EXP.13/14]
C코드는 원래 쓰던거라 잘못된곳은 없는데
address와 returnbytes가 또 쓰인곳이라고는
do {
bReadRC = ReadFile(hCom, (char *)&address, 8,&iBytesRead,NULL);
} while(iBytesRead != 8);

do {
bReadRC =ReadFile(hCom, (char *)&returnbytes, 4,&iBytesRead,NULL);
} while(iBytesRead != 4);

이 두 구문뿐이고

if (serialPort1.BytesToRead >= 8)
{
if (serialPort1.Read(buff, 0, 8) < 8) throw new InvalidOperationException();
}

C#에선 이런식으로 표현해줬습니다.
근데 C#에선 int address, returnbytes 해줘도 0의 값으로 들어가서 안되더라구요
사용자
스포너            [2018-06-11]
Level 22
 [EXP.45/50]
serialPort1.BaseStream으로 BinaryRead를 생성하여 ReadInt64및 ReadInt32로 address및 returnbytes를 설정하십시요

https://msdn.microsoft.com/ko-kr/library/system.io.binaryreader(v=vs.110).aspx
사용자
훈닷넷            [2018-06-11]
Level 8
 [EXP.13/14]
if (serialPort1.BytesToRead >= 8)
{
if (serialPort1.Read(buff, 0, 8) < 8) throw new InvalidOperationException();
}

이 식에 BinaryReader를 어떻게 생성하나요?

BinaryReader br = new BinaryReader(fs);
address = br.ReadInt32();
returnbytes = br.ReadInt32();
이렇게 하니 크기가 너무 크다고 나와요ㅠ
사용자
스포너            [2018-06-11]
Level 22
 [EXP.45/50]
댓글의 두 코드가 address와 returnbytes를 설정하는 코드입니다. 질문에는 누락되어 있네요.

동일하게 C#에서도 address와 returnbytes를 설정해야 합니다. 공유하신 C#코드에서는 없네요
사용자
훈닷넷            [2018-06-11]
Level 8
 [EXP.13/14]
C#에서도 동일하게 설정하려고 질문했었는데 어떤분이 위 댓글처럼 해주면 된다더군요...
그럼 위 코드가 틀렸다는 말씀이신데,
어떻게 바꿔야 C코드와 동일하게 작동하는지 알 수 있을까요?
태그로 엮인글
[구인&교육정보] [ 기흥 / 즉시 ] C# 생산관리 업무시스템 [ 개발 / 중급 ]   한국정보데이터시스
[구인&교육정보] [ 천안 수원 / 즉시 ] C# 제조관리 업무시스템 [ 운영 / 초-중급 ]   한국정보데이터시스
[ASP.NET Q&A] asp.net mvc5 특정 조건으로 업데이트하는 방법 좀   괴물
[C#.NET Q&A] MDSN 어떻게 활용하면 좋을까요? [2]+2  홍모죽
[구인&교육정보] 응용 프로그램 개발 해드립니다.  나미남이지
[WPF Q&A] c# viewModel에서 윈도우 참조질문입니다.[7]+1  이기현
[C#.NET Q&A] 윈폼 패널 투명처리 질문입니다.[1]+1  오마르
[구인&교육정보] AST.NET개발자 모십니다  장자방
[C#.NET Q&A] 윈폼에서 랜덤데이터셋 질문드립니다.[2] 파일첨부 당사지로
[ASP.NET Q&A] c# 정규식  구니구니
글리스트
윈폼 패널 투명처리 질문입니다.[1]+1  오마르
mssql 올드버전 쿼리 현재 버전 변환 문의  노오력을
for문 안에 동일한 조건 반복 비교 소스 질문[2]+2  빠라밤바
UI 인터페이스 질문입니다.[4]+1  Sad7Dayz
문자열 용량 질문드립니다.[1]+3  질문
윈폼에서 랜덤데이터셋 질문드립니다.[2] 파일첨부 당사지로
.cs 또는 desiner.cs 에 포함된 내용을 바꾸는 방법 문의.[2]  잭팟7777
Datagridview에 DataSource 변경문제 질문이요..[1]  야야얍
폼2에서 폼3의 listview 값 주기[1]  saki
엑셀 뷰어 질문 드립니다. 스프레드시트컨트롤[1]+2  하품하고파
 ★현재글->   C# 코드변환 확인부탁드립니다.[1]+9  훈닷넷
c# 이미지 캡쳐 프로그램 질문[1]  notorious
비주얼베이직에서 쓰던 for문인데 c#에서 알맞게 쓰드록 좀 도와주셔요 ㅠㅠ(프로그램입문3일째..)[1]  석유왕자
pictureBox 이미지 불러오기 ! [1]  문도
C#에서 C++ DLL 호출시 질문드립니다. 파일첨부 키모
Ring 저만 없나요? ( 이미지 첨부 )[1]+1  insurang
c# 이벤트 실행시 label text값 변경 질문이요 ! [3]+5  문도
BackgroundThread를 이용 중에 질문입니다.[2]+2  D.Dobob
IIS 파일 업로드 용량제한?  비베씨샾
버튼이미지 질문드립니다. [1]+1  제스
윈폼 단축키설정   비베씨샾