小编sro*_*uez的帖子

System.IO.IOException:另一个进程使用的文件

我一直在研究这段似乎微不足道的小代码,但我仍然无法确定问题出在哪里.我的功能很简单.打开文件,复制其内容,替换内部的字符串并将其复制回原始文件(然后在文本文件中进行简单的搜索和替换).我真的不知道怎么做,因为我在原始文件中添加了行,所以我只创建了一个文件副本,(file.temp)副本也备份(file.temp)然后删除原始文件(文件)并将file.temp复制到文件.我在删除文件时遇到异常.以下是示例代码:

private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
    {
        Boolean result = false;
        FileStream fs = new FileStream(file.FullName + ".tmp", FileMode.Create, FileAccess.Write);
        StreamWriter sw = new StreamWriter(fs);

        StreamReader streamreader = file.OpenText();
        String originalPath = file.FullName;
        string input = streamreader.ReadToEnd();
        Console.WriteLine("input : {0}", input);

        String tempString = input.Replace(extractedMethod, modifiedMethod);
        Console.WriteLine("replaced String {0}", tempString);

        try
        {
            sw.Write(tempString);
            sw.Flush();
            sw.Close();
            sw.Dispose();
            fs.Close();
            fs.Dispose();
            streamreader.Close();
            streamreader.Dispose();

            File.Copy(originalPath, originalPath + ".old", true);
            FileInfo newFile = new FileInfo(originalPath + ".tmp");
            File.Delete(originalPath);
            File.Copy(fs., originalPath, true); …
Run Code Online (Sandbox Code Playgroud)

c# io file-io ioexception

25
推荐指数
3
解决办法
14万
查看次数

ActiveMQ经纪人网络不转发消息

我有两个ActiveMQ代理(A和B)配置为存储转发网络.当代理B连接消费者并且生产者向A发送消息时,它们完美地将消息从A转发到B.问题是当消费者被杀死并重新连接到A时,B上排队的消息(它们是从A)不会转发回消费者所连接的A.即使我向B发送新消息,所有消息都被卡在B上,直到我重新启动经纪人.我试图在代理网络连接器上设置networkTTL ="4"和duplex ="true",但它不起作用.

failover activemq-classic

6
推荐指数
1
解决办法
2294
查看次数

使用派生类在C#中进行序列化

我正在构建一个通知框架,为此我将序列化和反序列化一个基本类,我想要发送的所有类都将从中派生.

问题是代码编译,但当我实际尝试序列化这个基本类时,我得到一个错误说

System.Runtime.Serialization.SerializationException:在Assembly'Xxx.DataContract中键入'Xxx.DataContracts.WQAllocationUpdate',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化.

这是代码:

public class WCallUpdate : NotificationData
{
    private string m_from = "";
    [DataMember]
    public string From
    {
        get { return m_from; }
        set { m_from = value; }
    }
    private WCall m_wCall = new WCall();
    [DataMember]
    public WCall Call
    {
        get { return m_wCall; }
        set { m_wCall = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

DataContract对通知如下:

/// <summary>
/// Basic class used in the notification service
/// </summary>
[DataContract]
public class …
Run Code Online (Sandbox Code Playgroud)

c# serialization derived-class

4
推荐指数
2
解决办法
3万
查看次数

C#UI事件取消订阅 - 必要吗?

我知道必须从事件中取消订阅.我的问题来自于生成的代码:当您修改从VS编辑器的用户界面,并添加事件处理程序的UI元素(例如: private void BtnSampleClick(object sender, EventArgs e))

在创建此事件处理时,VS会在private void InitializeComponent()自动生成的代码中添加此代码

this.btnSample.Click += new System.EventHandler(this.BtnSampleClick);
Run Code Online (Sandbox Code Playgroud)

问题是VS不会this.btnSample.Click -= new System.EventHandler(this.BtnSampleClick);在表单的Dispose方法中自动添加unsubscription().

通常我们应该在那里添加它们吗?如果不是这会泄漏到内存泄漏?想要检查VS是否有自动执行取消订阅的原因.即使我们不这样做,表格也可以正确处理?

谢谢你帮助我在这件事上轻描淡写!

c# events

4
推荐指数
1
解决办法
110
查看次数

可以在C#中使用带有非默认构造函数的单例吗?

我正在为我的一个项目实现一个通知框架.由于我希望它非常通用,用户可以使用多个传输层,因此他并不需要关心使用一种传递方法(比如说WCF)或另一种传递方法(例如ActiveMQ).用户可以访问的界面当然与传递方法(WCF或ActiveMQ)无关.尽管如此,这两个类(消费者和生产者)实现了单例,因此它们实际上使用默认构造函数(意思是没有参数).我的问题是,我想有一个参数,用户想要使用的交付方法.但据我所知,单身人士只使用默认构造函数?这是正常的,因为没有必要使用带参数的单例.那么,我的选择是什么?不要创建一个单身人士?创建一个设置交付方式的方法?

非常感谢您的帮助,

塞巴斯蒂安

c# singleton default-constructor

3
推荐指数
1
解决办法
3751
查看次数

Moq是单元测试的代理

我是新手使用Moq而我找不到这样做的方法.我有一个generateId私有方法,叫做

/// <summary>
/// Generates a call Id for external interfaces
/// </summary>
/// <returns></returns>
private string GenerateCallId()
{
return "EX" + SharedServicesClientProxy.Instance.GenerateId().ToString();
}
Run Code Online (Sandbox Code Playgroud)

我想对这个方法进行单元测试,因此我需要模拟代理.SharedServicesClientProxy只是一个实现接口ISharedServices但添加单例的对象.我想测试所有字符串是否正确返回以"EX"开头的字符串.这是我的单元测试,使用Moq

    /// <summary>
    /// A test for GenerateCallId
    /// A CallId for external systems should always start by "EX"
    ///</summary>
    [TestMethod()]
    [DeploymentItem("myDll.dll")]
    public void GenerateCallIdTest()
    {
        myService_Accessor target = new myService_Accessor();
        var SharedServicesClientProxy = new Mock<ISharedServices>();
        SharedServicesClientProxy.Setup(x => x.GenerateId()).Returns(5396760556432785286);
        string actual;
        string extCallIdPrefix = "EX";
        actual = target.GenerateCallId();
        Assert.IsTrue(actual.StartsWith(extCallIdPrefix));
    }
Run Code Online (Sandbox Code Playgroud)

我想我在错误的地方做我的模拟?

以更一般的方式,我如何模拟将要通过我正在测试的方法调用的对象?例如:

        /// <summary>
        /// dummy …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

2
推荐指数
1
解决办法
2148
查看次数

从Django中的一系列ID中检索匹配对象的列表

我想要实现一个相对简单的东西:我想在给定ID范围的情况下从模型中检索所有对象(例如,从书的章节中检索第5至10行)。

现在在我的views.py中,我已经:

def line_range(request, book_id, chapter_id, line_start, line_end):
   book_name = get_object_or_404(Book, id = book_id)
   chapter_lines = []
   for i in range (int(line_start), int(line_end)+1):
      chapter_lines .append(Line.objects.get(book = book_id, chapter = chapter_id, line = i))
return render_to_response('app/book.html', {'bookTitle': book_name, 'lines': chapter_lines })
Run Code Online (Sandbox Code Playgroud)

现在,这显然不是最优化的处理方式,因为它只能在一个数据库中完成n次数据库查询。有没有办法做类似的事情:

def line_range(request, book_id, chapter_id, line_start, line_end):
   book_name = get_object_or_404(Book, id = book_id)
   lines_range = range (int(line_start), int(line_end)+1)
   chapter_lines = get_list_or_404(Line, book = book_id, chapter = chapter_id, line = lines_range)
return render_to_response('app/book.html', {'bookTitle': book_name, 'lines': chapter_lines })
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这将生成更好的数据库查询(用1代替n),并且应该在性能上更好。当然,此语法不起作用(期望整数,而不是列表)。

谢谢!

django django-models

2
推荐指数
1
解决办法
2673
查看次数