我收到错误“ System.IO.IOException:进程无法访问该文件,因为它正被另一个进程使用”,同时尝试移动我刚创建的文件代码,同时作为批处理运行代码。我作为客户端运行它没有问题。我尝试过Googelling,其中一些建议是包含的。以下但没有注释,因为它不起作用。 (filenameOutTemp是我无法访问的那个)
...
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 :(得分:1)
批处理中的代码由.Net执行,它没有确定性的垃圾收集。
这是一个问题,因为AsciiIo文件在收集AsciiIo对象时被关闭了!
您可能通过programatically invoking the garbage collector解决问题。 只能批量执行此操作!
答案 1 :(得分:0)
您是否尝试过像WinAPIServer::CopyFile(...)
那样创建静态服务器方法,然后在执行批处理时调用该方法?