我有一个日志文件由另一个进程编写,我想要观察更改.每次发生变化时,我都想读取新数据,对其进行一些处理.
最好的方法是什么?我希望PyWin32库中有一些钩子.我找到了这个win32file.FindNextChangeNotification功能,但不知道如何让它看到一个特定的文件.
如果有人做过这样的事情,我会非常感激听到......
[编辑]我应该提到我是在一个不需要轮询的解决方案之后.
[编辑]诅咒!这似乎不适用于映射的网络驱动器.我猜Windows不会像在本地磁盘上那样"听到"文件的任何更新.
我最近一直在构建一个C#的测试框架,我一直在努力.我在我的工作区中设置了NUnit和一个新项目来测试组件.如果我从Nunit(v2.4)加载我的单元测试,一切运行良好,但我已经达到了在调试模式下运行并设置一些断点非常有用的地步.
我已经尝试了几个指南中的建议,这些指南都建议更改测试项目的"Debug"属性:
Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll
Run Code Online (Sandbox Code Playgroud)
我在那里使用控制台版本,但也试过调用GUI.当我尝试开始调试时,两者都给出了同样的错误:
Cannot start test project 'TestDSP' because the project does not contain any tests.
Run Code Online (Sandbox Code Playgroud)
这是因为我通常将\ DSP.nunit加载到Nunit GUI中并且这是测试所在的位置吗?
我开始认为问题可能是VS想要运行它自己的测试框架,这就是为什么它没能找到NUnit测试?
编辑:对于那些询问测试装置的人,TestDSP项目中的一个.cs文件看起来大致如下:
namespace Some.TestNamespace
{
// Testing framework includes
using NUnit.Framework;
[TestFixture]
public class FirFilterTest
{
[Test]
public void Test01_ConstructorTest()
{
...some tests...
}
}
}
Run Code Online (Sandbox Code Playgroud)
...我对C#和NUnit测试框架都很陌生,所以我完全有可能错过了一些关键的信息;-)
最终解决方案:最大的问题是我使用过的项目.如果您选择Other Languages -> Visual C# -> Test -> Test Project...当您选择项目类型时,Visual Studio将尝试使用它自己的测试框架,据我所知.您应该选择一个正常的 C#类库项目,然后我选择的答案中的说明将起作用.
这可能是一种风格问题,但我们的开发团队有一点分歧,我想知道是否有其他人对此事有任何想法......
基本上,我们有一些调试打印语句,我们在正常开发过程中关闭.我个人更喜欢做以下事情:
//---- SomeSourceFile.cpp ----
#define DEBUG_ENABLED (0)
...
SomeFunction()
{
int someVariable = 5;
#if(DEBUG_ENABLED)
printf("Debugging: someVariable == %d", someVariable);
#endif
}
Run Code Online (Sandbox Code Playgroud)
有些团队更喜欢以下内容:
// #define DEBUG_ENABLED
...
SomeFunction()
{
int someVariable = 5;
#ifdef DEBUG_ENABLED
printf("Debugging: someVariable == %d", someVariable);
#endif
}
Run Code Online (Sandbox Code Playgroud)
......哪些方法对你来说听起来更好?为什么?我的感觉是,第一个更安全,因为总有一些东西被定义,并且没有危险它可以破坏其他地方的其他定义.
我有一个类,它基本上只包含我的应用程序使用的一堆常量定义.但出于某种原因,longs编译但float不是:
class MY_CONSTS
{
public :
static const long LONG_CONST = 1; // Compiles
static const float FLOAT_CONST = 0.001f; // C2864
};
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
1>c:\projects\myproject\Constant_definitions.h(71) : error C2864: 'MY_CONSTS::FLOAT_CONST' : only static const integral data members can be initialized within a class
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我正在查看我正在使用的硬件接口的一些示例C++代码,并注意到以下几行中的许多语句:
if ( NULL == pMsg ) return rv;
Run Code Online (Sandbox Code Playgroud)
我敢肯定我听过有人说将常数放在第一位是一个好主意,但为什么呢?是否只是如果你有一个大的声明,你可以很快看到你正在比较什么,或者还有更多吗?
我有一些.csv文件,我正在使用它作为测试台的一部分.我可以打开它们并且没有任何问题地阅读它们,除非我已经在Excel中打开了文件,在这种情况下我获得了IOException:
System.IO.IOException:进程无法访问文件'TestData.csv',因为它正由另一个进程使用.
这是测试平台的片段:
using (CsvReader csv = new CsvReader(new StreamReader(new FileStream(fullFilePath, FileMode.Open, FileAccess.Read)), false))
{
// Process the file
}
Run Code Online (Sandbox Code Playgroud)
这是StreamReader的限制吗?我可以在其他应用程序(例如Notepad ++)中打开该文件,因此它不能成为操作系统问题.也许我需要使用其他一些课程?如果有人知道如何绕过这个(除了关闭excel!)我会非常感激.
我有一个描述GUI部分的WPF xaml文件,我希望特定控件的启用/禁用依赖于其他两个控件.代码看起来像这样:
<ComboBox Name="MyComboBox"
IsEnabled="{Binding ElementName=SomeCheckBox, Path=IsChecked}"/>
Run Code Online (Sandbox Code Playgroud)
但我希望它依赖于另一个复选框,所以类似于:
<ComboBox Name="MyComboBox"
IsEnabled="{Binding ElementName=SomeCheckBox&AnotherCheckbox, Path=IsChecked}"/>
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我情不自禁地觉得我错过了一些明显的东西或者错误的方式?
我有一个功能,可以在下载时产生结果.出于这个问题的目的,让我说我每秒产生一次刺痛,但我想要一个方便函数来包装我的生成器:
import time
def GeneratorFunction(max_val):
for i in range(0,5):
time.sleep(1)
yield "String %d"%i
def SmallGenerator():
yield GeneratorFunction(3)
for s in SmallGenerator():
print s
Run Code Online (Sandbox Code Playgroud)
...为什么不打印出我期待的5根弦?相反,它似乎返回生成器函数:
<generator object GeneratorFunction at 0x020649B8>
Run Code Online (Sandbox Code Playgroud)
如何让这个产生字符串作为普通的生成器函数?
我试图在日志文件中输出一些数字,我想通过printf函数填充一大堆浮点数来产生:
058.0
020.0
038.0
-050.0
800.0
150.0
100.0
Run Code Online (Sandbox Code Playgroud)
目前我这样做:
printf("% 03.1f\n", myVar);
Run Code Online (Sandbox Code Playgroud)
...其中myVar是一个浮点数.该语句的输出如下所示:
58.0
20.0
38.0
-50.0
800.0
150.0
100.0
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,我希望我的代码能够产生我在本文顶部提到的输出,但显然有些不对劲.你一次只能使用一面旗帜吗?..或者还有其他什么东西在这里?
托管C++是否具有与C#的lock()和VB的SyncLock相同的功能?如果是这样,我该如何使用它?
c++ ×3
c ×2
c# ×2
coding-style ×2
file ×2
if-statement ×2
python ×2
.net ×1
binding ×1
combobox ×1
constants ×1
formatting ×1
function ×1
generator ×1
isenabled ×1
managed-c++ ×1
nested ×1
nunit ×1
printf ×1
pywin32 ×1
readonly ×1
streamreader ×1
testing ×1
unit-testing ×1
visual-c++ ×1
watch ×1
wpf ×1
yield ×1