2010-05-19 135 views
0

我的應用程序的Windows在Win XP的形成.NET複製文件的PDF文件在共享網絡文件夾中的服務器贏得2003年複製的PDF文件共享網絡和文件損壞

在Win2003的管理員用戶檢測到某些損壞的文件的PDF文件,在共享文件夾。

我可以檢查一個文件是否在共享文件夾中正確複製?

代碼:我用兩種方式來複制/移動文件到共享文件夾

  1. 注:我的應用程序生成的PDF文件

  2. 寫字節到磁盤(共享文件夾)

    Public Public Function 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 
+2

你是如何複製文件?謹慎給我們一些代碼示例? – Aren 2010-05-19 21:39:17

+0

如果您的代碼示例是您的實際代碼,則建議在完成後使用文件流的「使用」語句清理資源。 – 2010-06-04 15:25:07

回答

0

要回答這個問題,除非你知道產生的文件格式 - 唯一的實體,可以如果告訴你文件已損壞或不是正在嘗試使用它的應用程序。 「腐敗」在嘗試使用該文件之外沒有任何背景,這就像是說.doc已損壞,因爲我的CAD應用程序無法讀取它,只有Word可以。

此外,File.Copy和File.Move作爲移​​動文件的快捷方法存在,而不是自己手動流式傳輸。

+0

如果是PDF文件?? 2,問題:1.如何檢測文件頭是否正確? 2.如何知道PDF是否損壞?謝謝 – Kiquenet 2010-06-24 14:35:50

+0

不確定,您需要找出PDF文件的正確格式以及任何標題,然後根據此正確格式測試當前格式的有效性。 – 2010-06-24 14:56:00

0

我有這個問題,結果我沒有等待足夠長的時間讓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); 
+0

我可能有類似的問題。這段代碼上面運行的代碼是什麼?你如何在'OUTPUTFILEPATH'生成文件? – jtate 2016-09-20 15:39:33

+0

@jayoaK - 在我們的應用程序中,AutoCAD被調用並傳遞了一個腳本來運行,最後它會將它生成的繪圖打印到PdfCreator打印機。當控制回到我們的應用程序時,它基本上坐在那裏等着看PDF是否已經生成(它知道文件將在什麼路徑/文件名創建)。所以訣竅是,不要試圖移動文件,直到我們確信它不僅被創建,而且PdfCreator完成了寫入文件。 – 2016-09-21 18:33:08