.NET IO异常"无效签名"

Joe*_*eid 9 .net c# ioexception

在Web服务中执行代码:

using (File.OpenRead(@"\\server\file.txt"))
{
    // some stuff
}
Run Code Online (Sandbox Code Playgroud)

导致IO异常只是说"无效签名"

使用File静态方法时,我无法通过谷歌找到有关此错误消息的任何内容.

var exists = File.Exists(@"\\server\file.txt"))
Run Code Online (Sandbox Code Playgroud)

但是不会抛出异常,这使得它看起来好像可以看到那里的文件,但它无法打开它进行读取.

对于"无效签名"在这个例子中试图说的话,我真的很茫然.

谢谢.

更新:

即使使用模拟从服务器打开读取文件,它仍然会使用"无效签名"抛出IO异常.

堆:

<StackTrace>
  <StackFrame Index="6">
    <FileName />
    <Method>Void RenderImages(System.String, System.Nullable`1[System.Int32])</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>88</ILOffset>
  </StackFrame>
  <StackFrame Index="5">
    <FileName />
    <Method>Void .ctor(System.String, Boolean)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>0</ILOffset>
  </StackFrame>
  <StackFrame Index="4">
    <FileName />
    <Method>Void .ctor(System.String, System.Text.Encoding, Boolean, Int32)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>7</ILOffset>
  </StackFrame>
  <StackFrame Index="3">
    <FileName />
    <Method>Void .ctor(System.String, System.Text.Encoding, Boolean, Int32, Boolean)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>113</ILOffset>
  </StackFrame>
  <StackFrame Index="2">
    <FileName />
    <Method>Void .ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>35</ILOffset>
  </StackFrame>
  <StackFrame Index="1">
    <FileName />
    <Method>Void Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>998</ILOffset>
  </StackFrame>
  <StackFrame Index="0">
    <FileName />
    <Method>Void WinIOError(Int32, System.String)</Method>
    <LineNumber>0</LineNumber>
    <ColumnNumber>0</ColumnNumber>
    <ILOffset>571</ILOffset>
  </StackFrame>
</StackTrace>
Run Code Online (Sandbox Code Playgroud)

环境:

 <Environment>
<DateTime.Now>1/23/2015 8:50:28 AM</DateTime.Now>
<MachineName>xxxxx</MachineName>
<UserDomainName>xxxxx</UserDomainName>
<UserName>xxxx</UserName>
<Executable>w3wp.exe</Executable>
<ExecutableTimestamp>0101.01.0000</ExecutableTimestamp>
<CommandLine>c:\windows\system32\inetsrv\w3wp.exe -ap "xxx.xxxxx.com" -v "v4.0" -l "webengine4.dll" -a \\.\pipe\iisipm45ad21f3-41a8-4e9a-a27c-fd0c679b337a -h "C:\inetpub\temp\apppools\xxxx.xxxx.com\xxxx.xxx.com.config" -w "" -m 0 -t 20 -ta 0</CommandLine>
<OSVersion>Microsoft Windows NT 6.3.9600.0</OSVersion>
<WorkingSet>168112128</WorkingSet>
<EnvironmentVersion>4.0.30319.34003</EnvironmentVersion>
Run Code Online (Sandbox Code Playgroud)

using (File.Open(@"\\server\file.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
Run Code Online (Sandbox Code Playgroud)

File.WriteAllText(destinationFile, sb.ToString());

where destinationFile is \\server\sharename\generatedFileName.txt
Run Code Online (Sandbox Code Playgroud)

出于澄清目的,也抛出异常.

Nat*_*han 1

我已经设法收到相同的错误消息。我认为以下方法有所帮助,但可能只是我强制应用程序在每次更改时重新加载。就我而言,我一直使用 SQL 2000 数据库中的字符串构建文件路径。

var folderVar = myDataRow["folderVar"].ToString();
var di = new DirectoryInfo("\\\\domain.website.com\\shares\\" + folderVar + "\\subdir\\");`
Run Code Online (Sandbox Code Playgroud)

在我将此代码更改为如下(可怕的)后,问题就停止了:

var folderVar = myDataRow["folderVar"].ToString();
if (folderVar == "ABC")
{
    var di = new DirectoryInfo("\\\\domain.website.com\\shares\\ABC\\subdir\\");`
}
else if (folderVar == "BCD")
{
    var di = new DirectoryInfo("\\\\domain.website.com\\shares\\BCD\\subdir\\");`
}
Run Code Online (Sandbox Code Playgroud)

我通常不使用字节级别的字符串格式。如果编码确实是问题,那么肯定有更好的解决方案。