小编Bar*_*ney的帖子

FileHelpers库CSV - 为什么总是从右边的最后一列中删除一个字母?

我找到了一个非常好的库来读取CSV文件 - FileHelpers,但我有一个奇怪的问题.我将不胜感激.提前致谢 !

映射后,我总是从右边的最后一列中删除一个字母.

我正在使用FileHelpers.dll版本2.0.0 - 来自的DotNet 2.0 FileHelpers_2_0_0_bin_docs_wizard.zip

例如,我有一个像这样的CSV(引用了一些列,但有些列不是,它可能会改变)

name;surname
"John";Smith
"Jack";Baker
Run Code Online (Sandbox Code Playgroud)

阅读文件后:

FileHelperEngine<SemicolonsRow> engine = new FileHelperEngine<SemicolonsRow>();
engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;

res = engine.ReadFile("C:\\a.txt");

if (engine.ErrorManager.ErrorCount > 0)
engine.ErrorManager.SaveErrors("C:\\Log.txt");
Run Code Online (Sandbox Code Playgroud)

我明白了:

res[0].Col0 with name
res[0].Col1 with surnam  (lack of e at the end)
res[1].Col0 with John
res[1].Col0 with Smit  (lack of h at the end)
Run Code Online (Sandbox Code Playgroud)

当我读这样的文件时:

name;surname;country
"John";Smith;USA
"Jack";Baker;Canada
Run Code Online (Sandbox Code Playgroud)

问题出在第三栏 - 所以我得到: countr US Canad

我的FileHelpers类:

[IgnoreEmptyLines()]
[DelimitedRecord(";")]
public sealed class SemicolonsRow
{
    [FieldOptional()]
    [FieldQuoted('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
    public …
Run Code Online (Sandbox Code Playgroud)

.net c# csv import filehelpers

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

Windows 服务 - 迁移到 64 位。实现“64 位优势”的步骤

我有自己的旧 Windows 服务 (.Net 3.5),它在 32 位 Windows 上运行。现在我们有一个 x64 Windows Server 2012,想迁移这个服务。

我的问题是:我是否应该对这个 Windows 服务做一些特别的事情,以实现 64 位框架的“所有好处”?我的意思是 - 我应该在 Visual Studio 2010(项目/解决方案属性)中构建/编译它时设置一些选项。或者是其他东西 ?或者我不需要做任何事情——它会自己使用 64 位框架,不管它是如何构建的。

c# 64-bit windows-services visual-studio-2010

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

WaitHandle.WaitAll和ManualResetEvent.Set() - 首先应该是什么?

我有一个关于WaitHandle.WaitAll工作的问题,并希望得到任何帮助.

让我们假设我有这样的情况:父线程正在打开几个子线程,并且必须等待"做其他事情",直到子线程完成他们的工作.

我使用WaitHandle.WaitAll并希望继续使用此方法.(没有Thread.Join等,请:))

ManualResetEvent[] events = new ManualResetEvent[list.Count];

foreach (string row in list)
{
    events[i] = new ManualResetEvent(false);                

    Thread thread = new Thread(new ParameterizedThreadStart(DoSomething));
    thread.Start(events[i]); // start child thread

    System.Threading.Thread.Sleep(1000000);

    i++;
}

WaitHandle.WaitAll(events); // wait for child threads finish their work
...
...


private DoSomething(object sth)
{
// some stuff that executes only 1 second
ManualResetEvent.Set()
}
Run Code Online (Sandbox Code Playgroud)

因此,第一个新启动的子线程的情况是调用ManualResetEvent.Set()是在父线程中调用WaitHandle.WaitAll(事件)之前.因为打开新子线程的循环有一些长时间超时.

所以我的问题,不是这样的时间问题吗?不应该在调用ManualResetEvent.Set()之前调用WaitHandle.WaitAll吗?

.net c# multithreading

0
推荐指数
1
解决办法
7200
查看次数