| 
			
			 | 
		#1 | 
| 
			
			 HAI; CAN HAS STDIO? 
		
			
	 | 
	
	
	
		
		
			
			 
			
			хелло.  
		
		
		
		
		
		
			задача: сгенерировать текстовый файл из аксапты (2009 SP1), причем файл должен иметь специальную последовательность символов в самом начале. эта последовательность состоит из набора непечатных ASCII символов, а главное, в ней 60 символов ASCII NULL. проблема: перебрал разные варианты, но не могу записать символ ASCII NULL в файл. просто ничего не пишется если я передаю в fileio.write num2char(hex2int("00")), или пишется символ "0", если я использую fileio.write(0), что можно было ожидать на самом деле. смотрел образец в hex-редакторе, там 60 символов с кодом "00". вопрос: как же их писать в текстовый файл? ответ: пока писал сообщение, разобрался с проблемой и решил уже не стирать. в результате я сначала создаю Binary, формирую в нем заголовок, записываю Binary в BinData, а его, в свою очередь, в файл, затем уже открываю его как TextIO и пишу нужную информацию. спасибо за внимание 
				__________________ 
		
		
		
		
	our sharp bitter vitriol is not that of the vulgar.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а если writeRaw(num2char(0)) ?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			может BinaryIO надо использовать
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 HAI; CAN HAS STDIO? 
		
			
	 | 
	
	
	
		
		
			
			 
			
			это чей такой метод, WriteRaw? если речь идет про TextIo, то нет, не пишет он таким образом ASCII NULL символ. ни WriteRaw, ни WriteChar(0). 
		
		
		
		
		
		
			а вот если вы про XmlTextWriter, то я еще не пробовал. зато точно говорю, что BinData + Binary работают: X++: BinData data = new BinData(); Binary myChar = new Binary(98); ; myChar.byte(0, hex2int("98")); myChar.byte(1, hex2int("01")); myChar.byte(2, hex2int("43")); myChar.byte(3, hex2int("50")); myChar.byte(4, hex2int("5F")); myChar.byte(5, hex2int("46")); myChar.byte(6, hex2int("53")); myChar.byte(7, hex2int("50")); myChar.byte(8, hex2int("53")); myChar.byte(9, hex2int("5F")); myChar.byte(10, hex2int("42")); myChar.byte(11, hex2int("4F")); myChar.byte(12, hex2int("4F")); myChar.byte(13, hex2int("4B")); data.setBinaryData(myChar); data.saveFile("C:\\temp\\temp.txt"); 
				__________________ 
		
		
		
		
	our sharp bitter vitriol is not that of the vulgar.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Недавно решал подобную задачу, нужно было размер файла изменить. Используются чистые winapi функции. При этом в файл пишутся те самые нули. Может пригодится : 
		
		
		
		
		
		
		
		
			X++: int handle; ; handle = WinAPI::CreateFile("C:\\Temp\\AX.TXT", #CREATE_ALWAYS, #GENERIC_WRITE); WinAPI::SetFilePointer(handle, 60, 2); WinAPI::SetEndOfFile(handle); WinAPI::CloseHandle(handle); X++: static int SetFilePointer(int _handle, int _lDistanceToMove, int _dwMoveMethod ) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _SetFilePointer = new DLLFunction(_winApiDLL, 'SetFilePointer'); _SetFilePointer.returns(ExtTypes::DWord); _SetFilePointer.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord); return _SetFilePointer.call(_handle, _lDistanceToMove, 0, _dwMoveMethod); } static int SetEndOfFile(int _handle ) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _SetEndOfFile = new DLLFunction(_winApiDLL, 'SetEndOfFile'); _SetEndOfFile.returns(ExtTypes::DWord); _SetEndOfFile.arg(ExtTypes::DWord); return _SetEndOfFile.call(_handle); } Последний раз редактировалось Eldar9x; 28.01.2009 в 08:24.  | 
| 
	
 | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |