Tag: C#的

System.IO.IOException:使用System.IO.Path.GetTempFileName()时parsing“该文件存在”?

我的一个客户每次尝试使用我的产品时都会遇到exception情况。 我得到了发生的exception的调用堆栈,其中最重要的是: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.IO.Path.GetTempFileName() at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream) at System.Windows.Input.Cursor..ctor(Stream cursorStream) 使用谷歌search这个,我发现很多博客post指出,当%TEMP%文件夹中有超过65535个临时文件时,会抛出这个exception,并且解决scheme是简单地清除旧的临时文件。 我可以要求客户这样做,但这可能只是一个临时解决scheme – 如果他们经常运行其他一些频繁调用GetTempFileName的软件,会不会反复出现问题呢? 我不能以编程方式清除%TEMP%文件夹,因为这可能会损坏别的东西,我不能避免调用GetTempFileName(而是使用我自己的临时文件夹),因为它不是我,而是调用它的WPF代码。 有没有永久的解决scheme呢? 更新 :我已经确认%TEMP%文件夹溢出日志文件的问题不是由我自己的代码引起的,必须由客户机器上的其他第三方应用程序引起。 我也研究了Cursor.LoadFromStream的实现,它肯定没有错 – 它生成一个临时文件,但是finally在finally块中删除它。

C ++日志框架的build议

我正在寻找具有以下function的C ++日志logging框架: 日志有一个严重性(信息,警告,错误,关键等) 日志标有模块名称 框架有一个UI(或CLI)来configuration我们将实际login到哪个模块的文件,以及将日志写入文件所需的最低严重程度。 有一个查看器,让我按模块search,严重性,模块名称,错误名称等

了解一个csproj程序集引用

我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目。 csproj文件,我发现有时文件引用显示为 <Reference Include="name"> 不过有时候看起来像 <Reference Include="name, Version=xxx, Culture=neutral, processorArchitecture=MSIL"> 什么可能导致差异? 受k3b的回答启发,我做了另一个testing。 我创build了一个新的类库项目。 添加文件参考。 “ 特性”窗格中的“ 特定版本 ”的初始值为False 。 csproj文件看起来像 <Reference Include="Name"> <HintPath>…</HintPath> </Reference> 将属性窗格中的特定版本更改为True 。 VS在Include属性中添加版本。 <Reference Include="Name, Version=…"> <HintPath>…</HintPath> </Reference> 将属性窗格中的特定版本更改为False 。 VS添加一个子元素SpecificVersion 。 <Reference Include="Name, Version=…"> <HintPath>…</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> 所以看来这个规则是: 当包含属性中存在版本并且没有SpecificVersion子元素时,文件程序集configuration为特定版本 SpecificVersion子元素只附加值False 。 有一件事我还是不明白: 对于我的新testing项目,如果删除文件引用并将其重新添加回去,则会返回到缺省值为1的格式。 对于我现有的项目,如果我删除了文件引用并将其重新添加回来,我将回到第3点的格式。虽然这也意味着不使用特定版本,但我想知道为什么它不回到格式的第1点。

Java – 类C叉?

是否有可能在java中使用一个新的独立jvm进程来创build一个“C”类叉? 怎么样?

typedefs的头文件最佳实践

我在一个项目中广泛地使用了shared_ptr和STL,这导致了过长的,容易出错的types,比如shared_ptr< vector< shared_ptr<const Foo> > > (我是一个ObjC程序员,是相当普遍的,而且这样做太多了。)我相信,要一致地调用这个FooListPtr并logging命名约定“Ptr”意思是shared_ptr,而“List”意思是shared_ptr的向量。 这很容易typedef,但它引起头痛头。 我似乎有几个选项来定义FooListPtr : Foo.h. 这纠缠所有标题和创build严重的构build问题,所以这是一个不起动。 FooFwd.h(“forward header”)。 基于iosfwd.h,这就是Effective C ++所build议的。 这是非常一致的,但维护两倍的标题数量的开销看起来很烦人。 Common.h(将所有这些文件放在一个文件中)。 这通过缠绕许多不相关的types来杀死可重用性。 您现在不能只拾取一个对象并将其移动到另一个项目。 这是一个不起眼的人。 如果还没有被typedefed的话,某种特殊的#define魔法。 我有一个持久的不喜欢的预处理器,因为我认为这使得新手难以挖掘的代码,但也许…. 使用vector子类而不是typedef。 这似乎很危险 这里有最佳做法吗? 它们如何以真实的代码出现,重用性,可读性和一致性是至关重要的? 我已经标记了这个社区维基,如果别人想要添加更多的讨论选项。

如何解释这个堆栈跟踪

我最近发布了Windows Phone 8应用程序。 该应用程序有时似乎随机崩溃,但问题是它没有中断崩溃,我得到的唯一信息是输出的消息,告诉我有没有提供任何细节的访问冲突。 所以在发布之后,从崩溃报告中我可以获得更多的信息,但是对我来说这些信息还是有点隐晦的。 信息是: Problem function: unknown //not very useful Exception type: c0000005 //this is the code for Access violation exception Stack trace: Frame Image Function Offset 0 qcdx9um8960 0x00035426 1 qcdx9um8960 0x000227e2 我不习惯使用内存指针和similia,我不习惯看到像这样的堆栈跟踪。 所以我有这样的问题: 我应该如何解读/阅读这些信息,每一条信息的含义是什么? 有没有一种方法来利用这些信息来针对我的search问题? 有没有办法在VS2012中debugging时获取这些信息? 笔记: 我不是问什么访问违规 我将其标记为c#和c ++,因为我的代码是在c#中,但通过c + +实现为WebBrowser组件生成exception(我半猜) 编辑: 我试着将Debugtypes设置为Native,这让我获得了我在开发中心崩溃报告中得到的相同信息。 通过这种方式,debugging程序在引发exception时中断,让我看到反汇编的代码,不幸的是没有qcdx9um8960 .pdb文件(即使在Microsoft Symbol Server上),所以我不知道导致错误的函数名称。

了解boost :: disjoint_sets

我需要使用boost :: disjoint_sets,但文档不清楚。 有人可以请解释每个模板参数意味着什么,也许给一个小例子代码创build一个disjoint_sets? 根据请求,我使用disjoint_sets来实现Tarjan的离线最小公共祖先algorithm ,即 – 值types应该是vertex_descriptor。

什么是车牌检测的好algorithm?

背景 对于我在大学的最后一个项目,我正在开发车牌检测应用程序。 我认为自己是一名中级程序员,但是我的math知识缺乏中学以上的知识,这使得制定正确的方程式比实际上更难。 我花了很多时间查找学术论文,例如: 在图像中检测车辆牌照 使用图像显着性的强大的车牌检测 车牌图像的局部增强用于车牌检测 说到math,我迷路了。 由于这种testing,各种graphics图像被certificate是有效的,例如: 至 然而,这种方法只适用于特定的图像,如果这些技术应用于不同的图像,我相信会发生较差的转换。 我读过一个叫做“底帽形态变换”的公式,它有以下几点: 基本上,变换保留了图片的所有黑色细节,并消除了其他所有内容(包括较大的黑色区域和较亮的区域)。 我无法find有关这方面的很多信息,但报告结尾附近的文件中的图像显示了它的有效性。 其他限制 在C#中开发 将项目仅限于英国注册牌照 我可以select要转换的图像作为演示 题 我需要关于我应该关注什么转换技术的build议,以及哪些algorithm可以帮助我。 编辑:新信息目前继续 – 车牌照检测

自定义容器应该有免费的开始/结束function?

当创build一个自定义的容器类,按照通常的规则(即与STLalgorithm一起工作,使用行为良好的通用代码等)工作时,在C ++ 03中,实现迭代器支持和成员开始/结束函数就足够了。 C ++ 11引入了两个新的概念 – 基于范围的循环和std :: begin / end。 基于范围的for循环理解成员开始/结束函数,所以任何C ++ 03容器都支持基于范围的开箱即用。 对于algorithm推荐的方法(根据Herb Sutter编写的“现代C ++代码”)是使用std :: begin代替成员函数。 然而,在这一点上,我不得不问 – 推荐的方法来调用一个完全合格的begin()函数(即std :: begin(c))或依赖于ADL并调用begin(c)? ADL在这种情况下似乎没用 – 因为如果可能,std :: begin(c)委托给c.begin(),通常的ADL好处似乎不适用。 如果每个人都开始依赖ADL,所有的定制容器都必须在必需的名称空间中实现额外的begin()/ end()自由函数。 然而,有几个消息来源似乎暗示了不合格的开始/结束呼叫是推荐的方式(即https://svn.boost.org/trac/boost/ticket/6357 )。 那么什么是C ++ 11的方式? 容器库作者应该为他们的类编写额外的开始/结束函数,以便在不使用名称空间std的情况下支持非限定的开始/结束调用; 或使用std :: begin;?

C ++中是否有二进制内存stream?

我通常使用stringstream来写入内存中的string。 有没有办法写入二进制模式的字符缓冲区? 考虑下面的代码: stringstream s; s << 1 << 2 << 3; const char* ch = s.str().c_str(); ch的内存将如下所示:0x313233 – 字符1,2和3的ASCII代码。我正在寻找一种方法来编写二进制值本身。 也就是说,我想在内存中的0x010203。 问题是我想能够写一个函数 void f(ostream& os) { os << 1 << 2 << 3; } 并决定在什么样的stream使用。 像这样的东西: mycharstream c; c << 1 << 2 << 3; // c.data == 0x313233; mybinstream b; b << 1 << […]