2012-06-05 2 views
-1

좋아, 나는 목록 상자를 통해 다른 수를 기반으로 폴더의 내용을 확인하는 가장 좋은 방법을 찾아 내려하고있다. 더 설명해 드리겠습니다.줄 번호를 기반으로 폴더에있는 파일 확인

두 개의 서로 다른 위치에있는 PDF의 수를 계산하여 총계로 계산하는 현재 코드는 다음과 같습니다.

'counts test1 pdfs 
    Dim f As String, c As Long 
    f = Dir$("\\Test1\PDFs\*.pdf") 
    Do While Len(f) <> 0 
     c = c + 1 
     f = Dir$() 
    Loop 

    'counts test2 pdfs 
    Dim n As String, d As Long 
    n = Dir$("\\Test2\PDFs\*.pdf") 
    Do While Len(f) <> 0 
     d = d + 1 
     n = Dir$() 
    Loop 

    GtotalPDFs = c + d 

다음은 현재 목록 상자에서 선택한 파일 수를 계산하는 코드입니다.

'adds temp1 files 
    Dim sum1 As Double 
    For Each item As String In Me.ListBox6.Items 
     sum1 += Double.Parse(item) 
    Next 

    'adds temp2 files 
    Dim sum2 As Double 
    For Each item As String In Me.ListBox7.Items 
     sum2 += Double.Parse(item) 
    Next 

    'adds temp3 files 
    Dim sum3 As Double 
    For Each item As String In Me.ListBox8.Items 
     sum3 += Double.Parse(item) 
    Next 

    'adds all files together to get a grand total 
    Gtotal = sum1 + sum2 + sum3 

목록 상자에 나열된 파일을 기반으로 PDF를 만드는 또 다른 프로세스가 있습니다.

내가 문제가되는 것은 Test1 및 Test2 폴더에서 생성 된 PDF가 목록 상자의 개수와 동일한 지 확인하는 것입니다. 이 계수는 다음 프로세스를 실행하기 전에 일치해야합니다. 두 가지 카운트가 일치 할 때까지 wait 또는 loop를 찾고, 다시 다음 프로세스를 실행하기 전에 다시 찾고 있습니다.

제안 사항?

+1

, 당신은'GetSelectedIndices()을 사용할 수 있습니다. 카운트()'선택한 항목의 수를 알고 (이 당신에게 인덱스를 제공합니다). – Minus

+0

이미 내 목록 상자 수를 알고 있습니다. PDF를 만드는 프로세스는 시간이 걸립니다 (한 번에 몇백 개를 생성합니다). 필자가 원하는 것은 생성 된 PDF가 목록 상자의 수와 같을 때까지 다음 프로세스를 실행하는 것입니다. – Muhnamana

답변

1

기꺼이 도와 드리 겠지만, 앞으로 무엇을하려고하고 무엇이 문제인지 설명해야합니다. 지금 당장 필요한 것은 분명하지 않습니다. 그러나 시작하기에 앞서 코드에 대한 몇 가지 확실한 개선 사항이 있습니다.

먼저 Dir과 Len을 사용하지 마십시오. 이러한 메서드는 VB6과의 하위 호환성을 위해서만 존재하며 VB6에서 사용하기에 좋은 프로그래밍 연습조차되지 않았습니다! 왜 두 번째 코드 예제에서 두 배를 사용하고,

Dim count1 As Integer = Directory.GetFiles("\\Test1\PDFs", "*.pdf").Length 
Dim count2 As Integer = Directory.GetFiles("\\Test2\PDFs", "*.pdf").Length 

둘째, 같은 System.IO 네임 스페이스의 개체를 사용? 파일 수가 단순한 경우 Doubles가 아닌 정수를 사용해야합니다. 그러나 여기서하고있는 일은 분명하지 않습니다. 이 경우 Double.Parse 메서드가 작동하는 유일한 유령은 목록의 각 항목에 숫자가 포함되어있는 경우입니다. 그러나 설명에서 파일 이름이 들어있는 것처럼 목록에 대해 설명합니다. 당신이 multiple``에 목록 상자`SelectionMode` 설정 않은 경우

+0

목록 상자에는 사용자가 선택한 파일 세트와 수량 확인을위한 회선 수가 표시됩니다. 디렉토리에 대한 개수를 기반으로 PDF를 작성하는 프로세스가 있습니다. 이 프로세스는 빠르지 않고 시간이 오래 걸립니다. 다음 단계를 계속하기 전에 디렉토리의 PDF가 목록 상자의 수와 같을 때까지 기다리는 방법을 알아 내려고합니다. 내 원인에 따라 해당 PDF 파일을 압축합니다. – Muhnamana

+1

@Muhnamana 나는 당신의 문제가 무엇인지에 관해서는 여전히 완전히 혼란 스럽다. 이미 파일을 계산하는 방법을 이미 알고 있고 목록 상자에서 합계를 합하는 방법을 이미 알고 있고 파일이 동일한 지 알고 싶다면 If If If If TotalFiles = ListBoxSum Then '. 그래도 그건 네가 묻고있는 것이 아니란 걸 확신한다. –

+0

어쩌면 ... 나는 이것을 수일 동안보고 있었기 때문에. 사용할 수있는 If 문은 계산을 위해 반복 할 수 있지만 검사를 계속하고 평등하면 다음 단계로 이동 하시겠습니까? – Muhnamana

1
Imports System.IO 

Dim PDFFileCount As Integer = 0 
Dim ListboxCount As Integer = 0 
While Not (PDFFileCount > 0 And PDFFileCount = ListboxCount) 
    PDFFileCount = Directory.GetFiles("\\Test1\PDFs", "*.pdf").Count + _ 
       Directory.GetFiles("\\Test2\PDFs", "*.pdf").Count 
    ListboxCount = ListBox6.SelectedItems.Count + ListBox7.SelectedItems.Count + _ 
       ListBox8.SelectedItems.Count 
    Application.DoEvents() 
End While 
+0

이것이 정확히 내가 생각하는 것 같습니다. 도와 주셔서 감사합니다. – Muhnamana

+1

@Muhnamana, 도와 드리겠습니다. 스티브 도그 (SteveDog)가 지적했듯이 GUI 스레드에서이 작업을 수행하는 것은 좋지 않으므로 Application.DoEvents에 추가했습니다. 그러나 Application.DoEvents는 좋은 프로그래밍 기술이 아니지만 일을 간단하게 유지하려고했습니다. –

+0

그래, 나는 지금까지 상당히 상당히 새롭다. 그러므로 내가 뭘하려고하는지에 대한 내 끔찍한 설명. 하하! 그러나 그렇습니다, 똑 바른 앞으로는 저를 위해 최상입니다. – Muhnamana

관련 문제