Скопируйте файлы PDfs в общую сеть и файлы повреждены - PullRequest
1 голос
/ 20 мая 2010

Мое приложение Windows создает .NET в Win XP, копирует файлы 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

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

У меня была эта проблема, в итоге я не стал долго ждать, пока PDF Printer завершит печать 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 голосов
/ 04 июня 2010

Чтобы ответить на вопрос, если вы не знаете конечный формат файла - единственная сущность, которая может сообщить вам, поврежден файл или нет, - это приложение, которое пытается его использовать. «Коррупция» не имеет контекста вне попытки использовать файл, это все равно что сказать, что .doc поврежден, потому что мое приложение CAD не может его прочитать, только Word может.

Кроме того, File.Copy и File.Move существуют в качестве ярлыков для перемещения файлов, а не для их потоковой передачи вручную.

...