【问题标题】:Copy PDfs Files to shared network and files corrupted将 PDfs 文件复制到共享网络和文件损坏
【发布时间】:2010-05-19 21:20:44
【问题描述】:

我的应用程序 Windows 在 Win XP 中形成 .NET,将文件 pdf 复制到服务器 win 2003 中的共享网络文件夹中。

Win2003 中的管理员用户在该共享文件夹中检测到一些损坏的 pdf 文件。

如何检查文件是否复制到共享文件夹中??

代码:我使用两种方法将文件复制/移动到共享文件夹

  1. 注意:我的应用生成 PDF 文件

  2. 将字节写入磁盘(共享文件夹)

    公共共享函数 GenerarFicheroDeBytes(ByVal datosFichero As Byte(), ByVal rutaFisicaFichero As String) As FileStream

    If Not Directory.Exists(Path.GetDirectoryName(rutaFisicaFichero)) Then
        Directory.CreateDirectory(Path.GetDirectoryName(rutaFisicaFichero))
    End If
    
    Dim fs As New FileStream(rutaFisicaFichero, FileMode.OpenOrCreate, FileAccess.Write)
    fs.Write(datosFichero, 0, datosFichero.Length)
    fs.Flush()
    fs.Close()
    Return fs
    

    结束函数

2 将文件移动到共享网络文件夹

Public Function MoverFicheroABuzonParaIndexar(ByVal rutaProcesarFicherosBuzon As String, ByVal nombreFichero As String) As String

Dim nombreFicheroPDF As String = String.Empty
Dim nombreFicheroPDFRenombrado As String = String.Empty
Dim nombreFicheroBuzon As String = String.Empty 

     nombreFicheroPDF = ... Path.GetFileNameWithoutExtension(...)
     nombreFicheroBuzon = ObtenerRutaFicheroBuzonParaIndexar(...)

      File.Move(nombreFicheroPDF, nombreFicheroBuzon)
Return nombreFicheroBuzon

End Function

【问题讨论】:

  • 你是如何复制文件的?愿意给我们一些代码示例吗?
  • 如果您的代码示例是您的实际代码,我建议您在完成后使用文件流的“Using”语句来整理资源。

标签: c# file networking copy


【解决方案1】:

要回答这个问题,除非您知道文件的结果格式 - 唯一可以告诉您文件是否损坏的实体是尝试使用它的应用程序。 “损坏”除了尝试使用文件之外没有任何上下文,这就像说 .doc 已损坏,因为我的 CAD 应用程序无法读取它,只有 Word 可以。

此外,File.Copy 和 File.Move 作为移动文件的快捷方式存在,而不是自己手动流式传输。

【讨论】:

  • 如果是PDF文件??,2个问题:1.如何检测文件头是否正确?。 2.如何知道PDF是否损坏???。谢谢
  • 不确定,您需要找出 PDF 文件的正确格式以及任何标题,然后针对该正确格式测试当前格式的有效性。
【解决方案2】:

我遇到了这个问题,最后我没有等待足够长的时间让 PDF 打印机完成打印 PDF,而且我只得到了文件的前半部分!在我的程序中放置一个简单的循环来解决这个问题:

// the file is there, make sure it is not still growing (printing). If it is, wait for it to stop
FileInfo fi = new FileInfo(OUTPUTFILEPATH);
long lastLength;
do
{
    lastLength = fi.Length;
    Thread.Sleep(1500);
    fi.Refresh();
}
while (fi.Length > lastLength);

【讨论】:

  • 我可能有类似的问题。在这个 sn-p 之上运行的代码是什么?您如何在OUTPUTFILEPATH 生成文件?
  • @jayoaK - 在我们的应用程序中,AutoCAD 被调用并传递一个脚本来运行,最后它将生成的绘图打印到 PdfCreator 打印机。当控制权回到我们的应用程序时,它基本上就坐在那里等待查看 PDF 是否已经生成(它知道文件将在哪个路径/文件名中创建)。所以诀窍是,在我们确定它不仅已创建,而且 PdfCreator 已完成对文件的写入之前,请不要尝试移动文件。
猜你喜欢
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多