|  09.09.2010, 17:10 | #1 | 
| Участник |  Как заменить "\" на "\\" в пути 
			
			есть таблица  ProdDataExchangeWithMes_KBK в которой поле Customers содержит путь типа "C:\Ax\File" При открытии/записи файла путь должен быть "C\\Ax\\File" Как заменить "\" на "\\" Вот код: Io fileIo = null; str rec; ProdDataExchangeWithMes_KBK prodDataExchangeWithMes; ; prodDataExchangeWithMes=ProdDataExchangeWithMes_KBK::find(); new FileIOPermission(prodDataExchangeWithMes.Customers,@"W").assert(); fileIo=new TextIo(prodDataExchangeWithMes.Customers, @"W", 1251); rec = "1;2;3;4;5;"; fileIo.write(rec); \\Здесь ругается - Ошибка времени выполнения Io Объект не инициализирован Подставляю путь C\\Ax\\File - все работает   | 
|  | 
|  09.09.2010, 17:17 | #2 | 
| Роман Долгополов (RDOL) | 
			
			\Classes\SysTreeNode\duplicatePathDelimiters может где и еще есть в более подходящих по смыслу местах | 
|  | |
| За это сообщение автора поблагодарили: ruslan_as (1). | |
|  09.09.2010, 17:36 | #3 | 
| MCP | 
			
			Используйте класс AsciiIo: X++: void AsciiIoExample() { AsciiIo asciiIo; container con; FileIoPermission perm; #define.ExampleFile(@"c:\test.txt") #define.ExampleOpenMode("r") ; // The AsciiIO.new method runs under code access permission. perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode); if (perm == null) { return; } // Code access permission scope starts here. perm.assert(); // BP deviation documented. asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode); if (asciiIo != null) { con = asciiIo.read(); } // Closes the code access permission scope. CodeAccessPermission::revertAssert(); } 
				__________________ AXIOMA Последний раз редактировалось kornix; 09.09.2010 в 18:03. | 
|  | |
| За это сообщение автора поблагодарили: ruslan_as (1). | |
|  09.09.2010, 18:09 | #4 | 
| Участник | 
			
			Премного благодарен - Буду разбираться.
		 | 
|  | 
|  10.09.2010, 09:23 | #5 | 
| Участник | 
			
			>>kornix asciiIo.write(rec); - Объект AsciiIo не инициализирован. В чем ошибка? Вот код: X++: AsciiIo asciiIo;
    str rec;
    #define.ExampleFile(@"c:\test.txt")
    #define.ExampleOpenMode("w")
    ;
    perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode);
    if (perm == null)
    {
        return;
    }
     perm.assert();
     asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode);
     rec    = "1;2;3;4;5;";
     asciiIo.write(rec);Последний раз редактировалось ruslan_as; 10.09.2010 в 09:25. | 
|  | 
|  10.09.2010, 10:26 | #6 | 
| MCP | 
			
			ruslan_as, попробуйте запустить такой job: X++: static void Job1(Args _args) { AsciiIo asciiIo; str rec; FileIoPermission perm; #define.ExampleFile(@"c:\test.txt") #define.ExampleOpenMode("w") ; perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode); if (perm == null) { return; } perm.assert(); asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode); rec = "1;2;3;4;5;"; asciiIo.write(rec); }   | 
|  | 
|  10.09.2010, 11:03 | #7 | 
| Участник | 
			
			>>kornix Job отработал. Спасибо! Файла небыло, но он создался. А вот этот же код в моем проэкте действительно без файла не работает. А мне файлы надо изначально создавать. ЧТО ДЕЛАТЬ?   | 
|  | 
|  10.09.2010, 11:27 | #8 | 
| Участник | 
			
			Все решили: X++: void TXTFile() { #define.ExampleOpenMode("w") Io fileIo = null; str path; str rec; FileIoPermission perm; ProdDataExchangeWithMes_KBK prodDataExchangeWithMes; ; prodDataExchangeWithMes=ProdDataExchangeWithMes_KBK::find(); path = SysTreeNode::duplicatePathDelimiters(prodDataExchangeWithMes.Customers+'\\test.txt'); perm = new FileIoPermission(path, #ExampleOpenMode); if (perm == null) { return; } perm.assert(); fileIo = new TextIo(path, #ExampleOpenMode); rec = "1;2;3;4;5;"; fileIo.write(rec); } | 
|  | 
|  10.09.2010, 11:45 | #9 | 
| Ищущий знания... | 
			
			отвечаю на вопрос   X++: FilePath filePath = @"C:\test.txt"; ; filePath = Global::strReplace(filePath, '\\', @'\\'); info(filePath); 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 10.09.2010 в 11:50. Причина: отредактировал код :) | 
|  | 
|  10.09.2010, 11:53 | #10 | 
| Участник | Цитата: Аксапта не такая умная, чтобы вычислить подобное на этапе компиляции. В результате будет задействована куча и сборка мусора. Иногда сложение строк в цикле делают просто чтобы код оформить красиво. В общем, ребяты - не злоупотребляйте сложением строк. лучше уж использовать четыре слеша или способ написания строки с @ X++: FilePath filePath = @"C:\test.txt"; ; filePath = Global::strReplace(filePath, @'\', @'\\'); info(filePath); | 
|  | 
|  10.09.2010, 11:54 | #11 | 
| Ищущий знания... | 
			
			добавлю немного к своему примеру   если вдруг вам заранее не известно сколько в тексте слэшов, то можно добавить проверку: X++: if (!strScan(filePath, @'\\', 1, strLen(filePath))) X++: FilePath filePath = @"C:\test.txt"; ; if (!strScan(filePath, @'\\', 1, strLen(filePath))) filePath = Global::strReplace(filePath, @'\', @'\\'); info(filePath); 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | 
|  10.09.2010, 11:54 | #12 | 
| Ищущий знания... | Цитата: 
		
			Сообщение от mazzy
			   не, не стоит вводить дополнительную операцию в куче ('\\' + '\\') Аксапта не такая умная, чтобы вычислить подобное на этапе компиляции. В результате будет задействована куча и сборка мусора. Иногда сложение строк в цикле делают просто чтобы код оформить красиво. В общем, ребяты - не злоупотребляйте сложением строк. лучше уж использовать четыре слеша или способ написания строки с @ X++: FilePath filePath = @"C:\test.txt"; ; filePath = Global::strReplace(filePath, @'\', @'\\'); info(filePath);  сам не люблю сложение строк   
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | |
| За это сообщение автора поблагодарили: CHESER85 (1). | |