关于Windows批处理文件:有没有办法来列出某个目录下的所有文件(或所有特定类型的)及其子目录,包括相对于当前(或搜索)列表目录的路径?
例如,如果我想要当前目录和子目录中的所有.txt文件及其完整路径,我可以这样做
for /r . %%g in (*.txt) do echo %%g >> C:\temp\test.txt
Run Code Online (Sandbox Code Playgroud)
要么
dir *.txt /b /s >> C:\temp\test.txt
Run Code Online (Sandbox Code Playgroud)
我会得到类似的东西
C:\test\Doc1.txt
C:\test\subdir\Doc2.txt
C:\test\subdir\Doc3.txt
Run Code Online (Sandbox Code Playgroud)
如果我做
for /r . %%g in (*.txt) do echo %%~nxg >> C:\temp\test.txt
Run Code Online (Sandbox Code Playgroud)
我会得到类似的东西
Doc1.txt
Doc2.txt
Doc3.txt
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是:
Doc1.txt
subdir\Doc2.txt
subdir\Doc3.txt
Run Code Online (Sandbox Code Playgroud)
可能吗?
如果我的帖子太混乱了:我基本上希望Linux CLI中的List文件具有相对于当前目录的路径,但仅适用于Windows.
我们的软件通过a解压缩某些字节数据GZipStream,从a读取数据MemoryStream.这些数据以4KB的块解压缩并写入另一个MemoryStream.
我们已经意识到进程分配的内存远远高于实际的解压缩数据.
示例:具有2,425,536字节的压缩字节数组被解压缩为23,050,718字节.我们使用的内存分析器显示Method MemoryStream.set_Capacity(Int32 value)分配了67,104,936个字节.这是保留和实际写入内存之间的2.9倍.
注:MemoryStream.set_Capacity被称为从MemoryStream.EnsureCapacity它本身被称为MemoryStream.Write我们的功能.
为什么MemoryStream保留这么大的容量,即使它只附加4KB的块?
以下是解压缩数据的代码段:
private byte[] Decompress(byte[] data)
{
using (MemoryStream compressedStream = new MemoryStream(data))
using (GZipStream zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (MemoryStream resultStream = new MemoryStream())
{
byte[] buffer = new byte[4096];
int iCount = 0;
while ((iCount = zipStream.Read(buffer, 0, buffer.Length)) > 0)
{
resultStream.Write(buffer, 0, iCount);
}
return resultStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果相关,这是系统配置:
我需要通过添加编译器开关来编译某个项目的不同版本.通常我会通过使用add_definitions或类似的东西来做到这一点
set_property( TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1 )
Run Code Online (Sandbox Code Playgroud)
在CMakeLists.txt文件中.
但是,在此特定项目中,我不允许修改任何源,包括CMakeLists.txt文件.
我希望有类似的东西
cmake -D_MYDEFINE=1 <path to sources>
Run Code Online (Sandbox Code Playgroud)
会生成一个项目文件(在我的情况下是Visual Studio 2008,但无关紧要),其预处理器定义中包含_MYDEFINE = 1,但实际上它不会.
我有什么选择?是否有不同的cmake命令行选项来实现此目的?只要不需要更改项目的CMakeLists.txt,就可以建议不包括命令行的解决方案.
我有一个IDbConnection的实例,可以是任何连接,Sql,OleDb等.我想制作一个通用的包装器,所以我可以发送包装器一个连接,并获得一组很好的方法,以便于操作.我有一个Query方法,我希望它返回一个DataTable,所以我可以做
IDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
adapter.Fill(ds);
Run Code Online (Sandbox Code Playgroud)
问题是我必须使用OleDbAdapter,它不适用于SQL,我真的不想写"特定于驱动程序"的代码.有没有办法从我的实例化IDbConnection对象中获取IDataAdapter实例?我知道我可以创建一个命令
IDbCommand command = _connection.CreateCommand();
Run Code Online (Sandbox Code Playgroud)
认为必须有一些简单的方法来对IDataAdapter做同样的事情是合乎逻辑的.
编辑:
using (var reader = command.ExecuteReader())
{
var dataTable = new DataTable();
dataTable.Load(reader);
}
Run Code Online (Sandbox Code Playgroud)
那不是我要求的,而是一个很好的解决方案.
我有关于库链接和.lib文件的问题...
这是背景:
我创建了一个DLL:MyLib.dll.
要在我的QT项目中使用该库,我只需要包含一个包含路径,一个指向库的链接并使用头文件:
LIBS += "C:\myPath\MyLib.dll"
INCLUDEPATH += "C:\myPath"
HEADERS += \
../myPath/MyLib_global.h \
../myPath/mylib.h
Run Code Online (Sandbox Code Playgroud)
我在我的项目中使用第三方DLL:third.dll
如果我执行与上面示例相同的操作,则它不起作用:
LIBS += "C:\myPath\third.dll"
Run Code Online (Sandbox Code Playgroud)
第三方DLL附带.lib文件"third.lib",我显然需要与DLL一起使用.
这是为什么?为什么有些DLL库需要.lib文件,但其他DLL库却不需要?
可能是.lib是一个访问DLL的静态库吗?
非常感谢!
有一个Oracle(10i)PL/SQL行级触发器,负责三个独立的任务.由于触发器相对混乱,我希望将这三个任务导出到三个存储过程中.我在考虑为程序使用my_table%ROWTYPE参数或集合类型,但我主要关心的是如何填充这些参数.
有没有办法将:NEW触发器的整行轻松放入单个变量?到目前为止,我能找到的唯一方法是将每个字段分别分配给不太令人满意的变量,查看代码维护等.
就像是
SELECT :NEW.* INTO <variable> FROM dual;
Run Code Online (Sandbox Code Playgroud)
会优先考虑.(我没有尝试过,但我认为它不起作用)
我正在尝试执行准备好的SQL查询,该查询更新CLOBOracle 10g数据库(10.2.0.1)中的字段.
如果我从内部执行以下查询SQL Developer并提供占位符的值,则没有问题.但是,如果我通过OracleCommand(Oracle.DataAccess.dll,版本1.102.0.1(我认为),.NET Framework 3.5)执行它,我会收到以下错误消息.请注意,我们不使用默认的oracle客户端,因为我们需要批量插入.不幸的是,给定的ODP版本和.NET Framework版本是一项艰难的要求,我们可能不会改变它.
查询:
UPDATE master_table
SET description = :description,
modification_notes = :modification_notes
WHERE master_id = :master_id;
Run Code Online (Sandbox Code Playgroud)
错误:
ORA-00932:不一致的数据类型:预期 - 获得CLOB
进一步的信息:
参数分配如下:
var param_description = new OracleParameter(":description", OracleDbType.Clob);
param_description.Value = "Test";
Run Code Online (Sandbox Code Playgroud)
我试过以下的事情:
to_clob()SQL查询Oracle.DataAccess.Types.OracleClob对象分配给参数.我也发现了以下描述,但我真的希望能够保留准备好的查询.
是否可以通过准备好的查询来完成此操作?
我附上了一个产生错误的完整示例.DESCRIPTION并且MODIFICATION_NOTES是CLOB数据库中的两列类型.
输入数据:
OracleConnection到数据库代码:
免责声明:我手动输入以下示例,可能存在实际代码中没有的错误
var query = "UPDATE master_table " +
"SET description = :description " +
" …Run Code Online (Sandbox Code Playgroud) 我正在使用QTestLib框架在QTableView中为自定义Validator编写单元测试.最基本的测试用例之一可以这样描述:
双击第三列和第四行中的表格单元格,并在其内容中附加数字"5".
仅仅改变模型中的值或任何东西是不够的,测试用例应该像这样执行:
注意:这个问题有一个关于如何从代码中将表格单元格设置为编辑模式的答案,但是单元测试应该尝试坚持人类用户的可能性,即鼠标/键盘操作.
我发现可以使用QTableView :: columnViewportPosition(int)和QTableView :: rowViewportPosition(int)检索单元格的X/Y位置.但是,使用QTest :: mouseDClick(...)双击指定位置既不选择单元格也不将其设置为编辑模式:
// Retrieve X/Y coordinates of the cell in the third column and the fourth row
int xPos = m_pTableView->columnViewportPosition( 2 );
int yPos = m_pTableView->rowViewportPosition( 3 );
// This does not work
QTest::mouseDClick( m_pTableView, Qt::LeftButton, QPoint( xPos, yPos ) );
Run Code Online (Sandbox Code Playgroud)
如何使用鼠标/键盘操作实现上述测试用例?
PS:我在Windows XP 32位和Qt 4.6.1下尝试这个
我正在编写一个Windows应用程序(在Qt 4.6中) - 在某些时候 - 将1到76000之间的任意数量的数据集插入到某个oracle(10.2)表中.应用程序必须从序列中检索主键或至少主键范围.然后,它将ID存储在列表中,该列表用于批处理执行准备好的查询.
(注意:不应使用触发器,序列也由其他任务使用)
为了避免调用序列X次,我想用X递增序列.
到目前为止我发现的是,在程序中可以使用以下代码:
ALTER SEQUENCE my_sequence INCREMENT BY X;
SELECT my_sequence.CURVAL + 1, my_sequence.NEXTVAL
INTO v_first_number, v_last_number
FROM dual;
ALTER SEQUENCE my_sequence INCREMENT BY 1;
Run Code Online (Sandbox Code Playgroud)
我有两个主要问题:
这个概念是多用户证明吗?或者可能发生以下事情:
Sequence is at 10,000
Session A sets increment to 2,000
Session A selects 10,001 as first and 12,000 as last
Session B sets increment to 5,000
Session A sets increment to 1
Session B selects 12,001 as first and 12,001 as last
Session B sets …Run Code Online (Sandbox Code Playgroud)我目前正在尝试通过 Razor 页面扩展现有的 ASP.NET Core MVC 项目(因为几个教程视频声称 MVC、API、Razor 和 Blazor 可以在同一个项目中共存 - 但没有一个显示它是如何完成的)。
我已经发现我需要通过以下方式扩展 Startup.cs
services.AddRazorPages();
Run Code Online (Sandbox Code Playgroud)
和
app.UseEndpoints(endpoints =>
{
// This was here already
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// I added this
endpoints.MapRazorPages();
});
Run Code Online (Sandbox Code Playgroud)
我尝试简单地在Views文件夹中添加一个剃刀页面“测试” ,_Layout.cshtml通过
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Test">Test</a>
</li>
Run Code Online (Sandbox Code Playgroud)
然后HomeController通过
public IActionResult Test()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
但是,这会导致几个问题,即未命中断点或ViewData字典null(在纯 Razor 页面项目中使用相同的代码),可能是因为它尝试将 Razor 页面视为 MVC 视图或其他东西。
我也试过添加类似的东西
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Home/Test">Test</a> …Run Code Online (Sandbox Code Playgroud) c# ×4
oracle ×3
plsql ×2
qt ×2
.net-3.5 ×1
asp.net ×1
asp.net-core ×1
batch-file ×1
c++ ×1
clob ×1
cmake ×1
cmd ×1
command-line ×1
dll ×1
gzipstream ×1
memory ×1
memorystream ×1
odp.net ×1
qt4 ×1
qt4.6 ×1
qtableview ×1
qtestlib ×1
razor ×1
session ×1
triggers ×1
windows ×1