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). |