2017-03-09 14 views
0

내 프로그램을 디버깅하는 데 도움이되는 다양한 솔루션을 검색했지만 아무 것도 작동하지 않습니다. 항목과 통계를 생성하고 .txt 파일을 만들고 작성하는 항목 생성기를 만듭니다. 유일한 문제는 텍스트 파일에 쓰지 않고 왜 그럴 수 없는지입니다. VB.Net 만든 텍스트 파일에 쓰기가 작동하지 않습니다. System.IO

   'Creates item text file 
       TextName = "Item" & ItemCount & "." & ItemType & ".Level" &  Level & "." & itemClass & "." & Rarity(0) 
       Dim path As String = "C:\Users\ryanl3\Desktop\My Stuff\Realms\Items\" & TextName & ".txt" 

       'Appends the stats to text file 
       Dim fw As System.IO.StreamWriter 
       fw = File.CreateText(path) 
       fw.WriteLine("Name: " & itemName) 
       fw.WriteLine("Type: " & ItemType) 
       fw.WriteLine("Damage: " & itemDamage) 
       fw.WriteLine("Class: " & itemClass) 
       fw.WriteLine("Rarity: " & Rarity(0)) 

내가 그것의 일부는 텍스트 파일 이름으로 저장되기 때문에 통계 생성 코드가 작동 알고 여기 만들고 파일에 기록하는 코드입니다. 이 코드 블록은 적어도 20 번 이상 전체 소스에 걸쳐 반복되므로이 첫 번째 고정식 코드를 나머지 코드에 적용 할 수 있습니다.

+1

해당 스트림 작성기를 닫았나요? 그런데 using 문을 사용하여 시작하십시오. – Steve

+1

filestream에 버퍼가 있습니다. 줄 단위로 작성하거나 문자별로 작성하지 않습니다. 스트림을 닫고 처리 할 때 버퍼를 플러시합니다. – Plutonix

답변

3

설명에서 설명한 것처럼 스트림을 닫아서 내부 버퍼를 디스크로 플러시해야합니다. StreamWriter가 범위를 벗어나서 가비지 수집기가 닫히기를 바랄 수는 있지만 솔리드 앱에서는 직접 처리해야합니다.

using statement 상황

Using fw = File.CreateText(path) 
     fw.WriteLine("Name: " & itemName) 
     fw.WriteLine("Type: " & ItemType) 
     fw.WriteLine("Damage: " & itemDamage) 
     fw.WriteLine("Class: " & itemClass) 
     fw.WriteLine("Rarity: " & Rarity(0)) 
    End Using 

코드는 컴파일러는이 코드의 시작 부분에 사용하여 블록 내부에 생성 된 일회용 객체를 폐기하는 데 필요한 코드를 추가하여 최종 도달 이런 종류의 완벽합니다. 이 방법으로 리소스 (파일 핸들)를 비우면 모든 것이 원활하게 작동합니다.

+0

소스 코드의 모든 블록을이 코드로 대체했습니다. 일단 .txt 파일이 생성되면 작동하는지 알려 드리겠습니다. – LeCarloVC