小编Jay*_*den的帖子

File.Copy在完成后锁定源文件

我们正在尝试将文件从服务器复制到.NET 2.0应用程序(C#)中的本地计算机,但不断锁定源文件.我们怀疑它是在文件服务器上配置的导致此行为的东西,但不确定是什么......你能帮忙吗?

在文件复制操作之后,文件服务器(Windows 2K3 R2)报告源文件是使用读锁保持的,即使服务器上的文件没有进一步操作.应用程序退出后将释放锁定.

我们能够重现这种行为,即使使用下面的最基本代码:

static void Main(string[] args)
{
    string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
    string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
    System.IO.File.Copy(sourceFile,destinationFile,true);

    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

锁定File.Copy()在行执行期间立即发生,并在此行完成后持续存在.在更复杂的应用程序中,当具有File.Copy()退出的例程(但应用程序仍在运行)时,锁定仍然存在.

只有当整个应用程序完成时才会释放锁定.

更改sourceFile为使用映射驱动器而不是UNC路径对行为没有任何影响.

当源文件位于另一台服务器上或位于本地时,不会发生此行为.

如果我们在之后添加以下行 File.Copy,则立即释放锁:

new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
Run Code Online (Sandbox Code Playgroud)

这听起来好像在服务器上有什么东西导致了这种行为.我们在服务器上安装了ShadowProtect以及McAfee防病毒软件.除此之外,似乎没有其他任何东西安装在Windows Server及其组件之上.

我们也不确定为什么要求对文件的读取权限可以解决问题.

如果你能回答这些问题,我们将非常感激:

  1. 是什么导致文件锁持续存在?
  2. 为什么要求读取权限可以解决问题?

.net file-locking

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

SQL 2000中的ODBC问题 - > 2005升级

这个wiki帖子概述了问题和解决方案.我想发布这个可能有类似问题的其他人,因为我找不到任何具体的解决方案来解决其他问题.

我们最近将SQL Server 2000数据库升级到SQL Server 2005.服务器上的一个数据库是MS Access数据库的后端.MS Access数据库使用传递查询,通过无DSN的ODBC连接到SQL Server.

无DSN连接字符串的示例如下所示:

ODBC; DRIVER=SQL Server;SERVER=servername;APP=Microsoft® Access (Pass Through
    Query);DATABASE=databasename;Network=DBMSSOCN;ConnectionTimeout=20;
    Trusted_Connection=Yes
Run Code Online (Sandbox Code Playgroud)

升级后,我们发现用户无法运行传递查询,并显示以下错误:

ODBC - 与"SQL Server"的连接失败

这最初似乎是一个权限问题,因为将SQL服务器登录的priveledges提升到sysadmin服务器角色缓解了这个问题(但显然这不是一个很好的解决方案).

从登录sysadmin角色后,我们发现当通过Management Studio连接到SQL Server时,登录可以执行存储过程.MS Access中无法进行相同的登录.这指向了MS Access在尝试执行存储过程时所做的事情 - 而不是权限问题.

我们使用Profiler在服务器上运行了一个跟踪,这显示MS Access试图在存储的proc执行之前执行以下命令:

DBCC TRACEON(208)
Run Code Online (Sandbox Code Playgroud)

在存储过程执行之前,它似乎在此命令失败.对Web的研究表明,DBCC TRACEON(208)相当于使用'SET QUOTED IDENTIFIERS ON'命令,并且在SQL 2005中,运行此DBCC命令的priveledges已被撤销.

经过进一步研究,我们发现对MS Query的引用存在类似的问题,并且连接字符串的APP组件应该从"MS Query"更改为其他内容.

在预感中,我们更改了ODBC连接字符串的APP组件,并且MS Access在存储过程执行之前不再尝试执行DBCC TRACEON(208).

经过进一步测试,我们将问题跟踪到APP组件中包含的"版权"符号:

APP=Microsoft® Access (Pass Through Query)
Run Code Online (Sandbox Code Playgroud)

通过删除版权符号,一切都很好的连接和应用程序工作,就像以前在SQL 2000上所做的那样.

希望这可以帮助其他有类似问题的人.

sql-server ms-access odbc connection-string dbcc

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

转换VB.NET - > C#Projects

任何人都可以推荐一个可以用来将VB.NET项目转换为C#的好应用程序,而不必做太多的手工工作吗?

我们已经使用Reflector手动执行小型库,但是一些较大的项目太慢而且复杂,无法手动完成.

.net c# vb.net

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

ggplot2 ggsave函数导致图形设备无法显示绘图

我已经更新了我的ggplot2库,我现在遇到一个问题,在调用ggsave后,图形设备不再显示该图.我无法解决这个问题,这意味着我无法根据需要导出图表.请帮忙.

搜索网络已经显示出一些dpi不匹配问题,但设置或更改dpi似乎没有任何效果.在更新ggplot2库之后,似乎已经开始出现此问题.

以下代码重现了该问题:

library(ggplot2);
df <- read.table(textConnection('value,value1 
 1,1 
 2,2
 3,3 '),header=TRUE,sep=',');

ggplot(df,aes(x=value,y=value1)) +   geom_point();

setwd('c:/temp'); 
ggsave('test.png');
Run Code Online (Sandbox Code Playgroud)

运行后,输出为空白,图形设备不再显示绘图.任何后续图表都不会显示在图形设备上.

运行dev.off()之后,新的图表显示正常,直到再次调用ggsave.

sessionInfo()将R和库的版本报告为:

R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_New Zealand.1252  LC_CTYPE=English_New Zealand.1252   
[3] LC_MONETARY=English_New Zealand.1252 LC_NUMERIC=C                        
[5] LC_TIME=English_New Zealand.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plyr_1.8        ggplot2_0.9.3.1 RODBC_1.3-6    

loaded via a namespace (and not attached):
 [1] colorspace_1.2-2   dichromat_2.0-0    digest_0.6.3       grid_3.0.0         gtable_0.1.2      
 [6] labeling_0.1       MASS_7.3-26        munsell_0.4        proto_0.3-10       RColorBrewer_1.0-5
[11] reshape2_1.2.2     scales_0.2.3       stringr_0.6.2 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

使用Windows 7中的Winspool.drv从Windows XP 32位进行更改

我有一些C#代码(VS2010; fx2),用于执行打印机功能.此代码在Windows XP环境中正常工作.更改为Windows 7,它不再正常工作.

第一个不同的行为是GetPrinterNames()方法现在只返回本地打印机.如您所见,标志也设置为包括NETWORK打印机.我尝试过不同的旗帜,但没有成功.

我应该在Windows 7/64位版本中引用不同的库吗?

打印机助手类,代码如下所示:

internal class Printers
{

    ...

    [DllImport("winspool.drv", SetLastError = true)]
    static extern bool EnumPrintersW(Int32 flags, [MarshalAs(UnmanagedType.LPTStr)] string printerName,
         Int32 level, IntPtr buffer, Int32 bufferSize, out Int32 requiredBufferSize,
         out Int32 numPrintersReturned);

    [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool EnumPrinters(PrinterEnumFlags Flags, string Name, uint Level, IntPtr pPrinterEnum, uint cbBuf, ref uint pcbNeeded, ref uint pcReturned);

    ...

    ...

    public static string[] GetPrinterNames()
    {
        List<string> returnVal = new List<string>();
        foreach(PRINTER_INFO_2 info in enumPrinters(PrinterEnumFlags.PRINTER_ENUM_LOCAL …
Run Code Online (Sandbox Code Playgroud)

c# 64-bit network-printers windows-7

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

R plotCI错误设计的颜色为系列绘制

在Windows 7上的R v2.14.0 x64中,我在gplots库中使用plotCI函数,并尝试使用以下内容基于数据框内的数据设置每个绘图的颜色:

plotCI(
        x = data[1:2,3], 
        ui = data[1:2,5], 
        li = data[1:2,4], 
        col=data[1:2,6], 
        lty = 1, pch=20, xaxt ="n", xlim = c(1,42), ylim = c(0,100), 
        gap = 0 )
Run Code Online (Sandbox Code Playgroud)

除了绘制点的颜色(错误地符合错误的系列)之外,绘图正确地发生(但是颜色在系列内是一致的).

我有一个结构数据框(仅前7行):

     size qim       X1   lower    upper color
1    1000   1 100.0000 99.6000 100.0000  blue
2    1000   2  99.8000 99.4000 100.0000  blue
3    1000   3  98.2000 96.6000  99.2000  blue
4    1000   4  62.7000 58.8000  65.7000  blue
5    1000   5  10.4000  9.0000  12.5000  blue
6    1000   6   3.9000  2.9000   4.9000 …
Run Code Online (Sandbox Code Playgroud)

plot r

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

加入mysql5

我见过人们写下面的查询

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
Run Code Online (Sandbox Code Playgroud)

写得像这样

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name2.column_name =table_name1.column_name
Run Code Online (Sandbox Code Playgroud)

它实际上有什么不同吗?

mysql sql syntax

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