Tag: C#的

如何避免System.IO.PathTooLongException?

我们经常遇到这个问题 例: 如果我有一个文件,我想将它复制到另一个目录或UNC共享,如果path的长度超过248(如果我没有弄错),那么它会抛出PathTooLongException。 有没有解决这个问题的方法? PS:有没有任何registry设置将此path设置为较长的​​字符集?

两个具有相同名称空间的不同的DLL

我有两个DLL文件,他们都有一个相同的命名空间,但他们有不同的function和types。 我怎样才能在我的项目中引用这两个DLL并使用它们的函数和types? 顺便一提。 这两个DLL有一些相同名称,不同实现的function和types,以及一些独特的function和types

Stream.Dispose是否总是调用Stream.Close(和Stream.Flush)

如果我有以下情况: StreamWriter MySW = null; try { Stream MyStream = new FileStream("asdf.txt"); MySW = new StreamWriter(MyStream); MySW.Write("blah"); } finally { if (MySW != null) { MySW.Flush(); MySW.Close(); MySW.Dispose(); } } 我可以只是调用MySW.Dispose()并跳过closures即使它提供? 有什么Stream implimentations不能按预期工作(像CryptoStream)? 如果不是,那么下面就是不好的代码: using (StreamWriter MySW = new StreamWriter(MyStream)) { MySW.Write("Blah"); }

分段写入string时出现错误

我正在尝试编写一个就地反转函数,并且几乎完全遵循在线代码,但运行以下程序会引发总线错误。 我是否将错误的parameter passing给reverse()? void reverse(char *str) { char * end = str; char tmp; if (str) { while (*end) { ++end; } –end; while (str < end) { tmp = *str; *str++ = *end; *end– = tmp; } } } int main() { char *s = "sample"; reverse(s); printf("%s\n"); return 1; }

如何在malloc()结构中使用C ++string?

我写了下面的示例程序,但它崩溃与段错误。 问题似乎是在结构中使用malloc和std::string s。 #include <iostream> #include <string> #include <cstdlib> struct example { std::string data; }; int main() { example *ex = (example *)malloc(sizeof(*ex)); ex->data = "hello world"; std::cout << ex->data << std::endl; } 我无法弄清楚如何使它工作。 任何想法,如果甚至可以使用malloc()和std::string s? 谢谢,Boda Cydo。

在C ++中使用Static_cast向下转换

class base { base(); virtual void func(); } class derived : public base { derived(); void func(); void func_d(); int a; } main { base *b = new base(); sizeof(*b); // gives 4. derived * d = static_cast<derived*>(b); sizeof(*d); // gives 8- means whole derived obj size..why? d->func_d(); } 在上面的代码中,我做了一个向基类对象指向派生类指针的基指针的向下转换。 我想知道如何派生指针具有整个派生类对象。 我可以调用派生类函数(仅在派生类中声明)。 我在这里没有得到这个概念。

有什么理由使用这个 – >

我用C ++编程了很多年,对于一件事我仍然有疑问。 在其他人的许多地方代码我看到像这样的东西: void Classx::memberfunction() { this->doSomething(); } 如果我需要导入/使用那个代码,我只是删除这个 – >部分,我从来没有看到任何破碎或有一些副作用。 void Classx::memberfunction() { doSomething(); } 那么,你知道有什么理由使用这样的结构吗? 编辑:请注意,我在这里谈论成员函数,而不是variables。 我明白它可以用来当你想区分一个成员variables和函数参数。 编辑:明显的重复: 是否有任何理由不使用“这个”(“自我”,“我”,…)?

我如何正确地删除/重构“朋友”依赖声明?

这个问题的背景是基于一个实际的例子,我想从一对用于pipe理对共享资源的读/写locking访问的类中移除“朋友”依赖项。 以下是该场景的原始结构devise的抽象: 标记为红色,这是我想从devise中删除这个丑陋的“朋友”依赖项。 总之,为什么我有这样的事情: ClassAProvider通过多个并发访问的Client实例共享对ClassA的引用 Client实例应该只通过pipe理内部的ClassAAccessor辅助类来访问ClassA ClassA隐藏所有从ClassAAccessor被保护的方法。 所以ClassA可以确保Client需要使用ClassAAccessor实例 此模式主要用于确保将ClassA实例保留在已定义的状态,如果Client操作被释放(由于例如未捕获的exception)。 想想ClassA提供(内部可见)成对的操作,如lock() / unlock()或open() / close() 。 无论如何应该调用(状态)反转操作,特别是当客户端由于exception而崩溃时。 这可以通过ClassAAcessor的生命周期行为安全的处理,析构函数的实现可以保证它。 以下序列图说明了预期的行为: 此外, Client实例可以轻松访问ClassA ,只需使用C ++范围块即可: // … { ClassAAccessor acc(provider.getClassA()); acc.lock(); // do something exception prone … } // safely unlock() ClassA // … 到目前为止,这一切都很好,但是ClassA和ClassAAccessor之间的“朋友”依赖关系应该被删除,原因很多 在上一个UML的UML 2.2上层结构的C.2部分中,它表示: The following table lists predefined standard elements for UML 1.x that […]

为什么比较double和float会导致意想不到的结果?

可能重复: 浮点数与浮点数相比,奇怪的输出 float f = 1.1; double d = 1.1; if(f == d) // returns false! 为什么这样?

一次只运行一组任务

比方说,我有100个任务需要10秒钟的时间。 现在我只想一次只运行10个,就像10个任务中的1个完成另一个任务,直到所有任务完成。 现在我总是使用ThreadPool.QueueUserWorkItem()来完成这个任务,但是我读过这样做是不好的做法,而应该使用Tasks来代替。 我的问题是,我没有find一个很好的例子,所以你可以让我开始如何实现这个目标与任务?