2013-12-02 2 views
0

Я получаю сообщение об ошибке «System.IO.IOException: процесс не может получить доступ к файлу, поскольку он используется другим процессом "при попытке переместить файл, который я только что создал в коде, при запуске кода в виде пакета. У меня нет проблем с запуском его как клиента. Я пробовал Googelling, и некоторые из предложений вкл. ниже, но без ранения, так как это не сработало. (FilenameOutTemp это один я не могу получить доступ)System.IO.File :: Move failed, процесс не может получить доступ к файлу, потому что он используется другим процессом

... 
    asciiIoOut = new AsciiIo(filenameOutTemp, #io_append); 
    asciiIoOut.outFieldDelimiter(#fieldDelimiter);  

    if (createFile) 
     { 
      // Replace the vend account from DDD with local: 
      record = conpoke(record, colVendDDD, vendSetupDDD.VendAccount); 
      asciiIoOut.writeExp(record); 
     } 
    } 

    //CodeAccessPermission::revertAssert(); 
    asciiIoOut.finalize(); 
    asciiIoOut = null; 


    //Move from temp folder to vender item folder: 
    fshVendTable = RetailVendTable::find(vendSetupDDD.VendAccount); 
    filenameOut = fshVendTable.filePathImport(VendorFileImportPath::Items); 
    filenameOut += #filePathSeperator + substr(inventImportFiles.Filename,1, strLen(inventImportFiles.Filename) - 4); 
    filenameOut += #spacer + #item + #spacer + filenameDate + #spacer + filenameTime + #csv; 

    //new InteropPermission(InteropKind::ClrInterop).assert(); // get dll interop permission 
    try { 
     System.IO.File::Move(filenameOutTemp, filenameOut); 
    } 
    catch(Exception::Error) { 
     warning("move failed"); 
    } 

надежда кто-то может помочь, пожалуйста :)

+0

Как и на мою собственную проблему http://stackoverflow.com/questions/17637619/move-a-file-ax2012 –

+0

:(Если все остальное не удается, перезапустите AOS, попробуйте инициализировать System.Diagnostics.Process и выполнить команду «move» Последнее средство. –

+0

Почему ваши разрешения закомментированы? – AnthonyBlake

ответ

1

Код в партии выполняется .Net, которые не имеют детерминированный сбор мусора.

Это проблема, так как файлы AsciiIo закрываются, когда мусор собирает объект AsciiIo!

You may решить проблему programatically invoking the garbage collector. Только делайте это в пакетном режиме!

0

Вы пытались создать статический серверный метод, похожий на WinAPIServer::CopyFile(...), а затем вызов этого метода при выполнении пакета?