Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Почему так долго? Добавлено: 04.05.09 16:49  

Автор вопроса:  Sergey
For Each files In IO.Directory.GetFiles ListBox1.Items.Add(files)
Next

For Each member In ListBox1.Items
 TextBox3.Text = My.Computer.FileSystem.GetName(member)
Next

Файлов более 10000.
Почему, когда я получаю имя файла, то это происходит почти мгновенно, а когда хочу получить время создания, то процесс длится несколько минут.

Ответить

  Ответы Всего ответов: 30  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 04.05.09 22:41
Юзай FindFirstFile/FindNextFile, в WIN32_FIND_DATA дата создания и имя файла получаются одновременно.

Ответить

Номер ответа: 2
Автор ответа:
 Sergey



Вопросов: 39
Ответов: 87
 Профиль | | #2 Добавлено: 05.05.09 09:45
Там нет ни одного примера на VB, только на С.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 05.05.09 10:03
Учи C++.

Ответить

Номер ответа: 4
Автор ответа:
 Sergey



Вопросов: 39
Ответов: 87
 Профиль | | #4 Добавлено: 05.05.09 10:48
Я делаю прогу на VB 2008. Учить С - не выход.

Лучше скажи, где ошибка.

Public Structure FILETIME
        ;Dim dwLowDateTime As Long
        ;Dim dwHighDateTime As Long
End Structure

Public Structure WIN32_FIND_DATA
        ;Dim dwFileAttributes As Long
        ;Dim ftCreationTime As FILETIME
        ;Dim ftLastAccessTime As FILETIME
        ;Dim ftLastWriteTime As FILETIME
        ;Dim nFileSizeHigh As Long
        ;Dim nFileSizeLow As Long
        ;Dim dwReserved0 As Long
        ;Dim dwReserved1 As Long
        ;Dim cFileName As String
        ;Dim cAlternate As String
End Structure

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
 ;(ByVal lpFileName As String, ByVal lpFindFileData As WIN32_FIND_DATA) As Long

For Each files In IO.Directory.GetFiles()
            ;Dim time As WIN32_FIND_DATA
            textbox3.text=FindFirstFile(files, time.ftCreationTime)
Next

Ответить

Номер ответа: 5
Автор ответа:
 Sergey



Вопросов: 39
Ответов: 87
 Профиль | | #5 Добавлено: 05.05.09 15:43
Без смайликов!!!
  1.  
  2. Public Structure FILETIME
  3.         Dim dwLowDateTime As Long
  4.         Dim dwHighDateTime As Long
  5.     End Structure
  6.  
  7.     Public Structure WIN32_FIND_DATA
  8.         Dim dwFileAttributes As Long
  9.         Dim ftCreationTime As FILETIME
  10.         Dim ftLastAccessTime As FILETIME
  11.         Dim ftLastWriteTime As FILETIME
  12.         Dim nFileSizeHigh As Long
  13.         Dim nFileSizeLow As Long
  14.         Dim dwReserved0 As Long
  15.         Dim dwReserved1 As Long
  16.         Dim cFileName As String
  17.         Dim cAlternate As String
  18.     End Structure
  19.  
  20.     Structure SYSTEMTIME
  21.         Dim wYear As Integer
  22.         Dim wMonth As Integer
  23.         Dim wDayOfWeek As Integer
  24.         Dim wDay As Integer
  25.         Dim wHour As Integer
  26.         Dim wMinute As Integer
  27.         Dim wSecond As Integer
  28.         Dim wMilliseconds As Integer
  29.     End Structure
  30.  
  31.  
  32.     Declare Function lopen& Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long)
  33.     Declare Function lclose& Lib "kernel32" Alias "_lclose" (ByVal hFile As Long)
  34.     Public Const READAPI = 0
  35.     Public Const WRITEAPI = 1
  36.     Public Const READ_WRITE = 2
  37.  
  38.     Declare Function GetFileTime& Lib "kernel32" (ByVal hFile As Long, ByVal lpCreationTime As FILETIME, ByVal lpLastAccessTime As FILETIME, ByVal lpLastWriteTime As FILETIME)
  39.     Declare Function FileTimeToSystemTime& Lib "kernel32" (ByVal lpFileTime As FILETIME, ByVal lpSystemTime As SYSTEMTIME)
  40.  
  41.     Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
  42.  (ByVal lpFileName As String, ByVal lpFindFileData As WIN32_FIND_DATA) As Long
  43.  
  44.     Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  45.  
  46.  
  47. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  48.         Dim lFileHwnd As Long
  49.         Dim lDummy As Long
  50.         Dim ftModified As FILETIME
  51.         Dim ftCreated As FILETIME
  52.         Dim ftAccessed As FILETIME
  53.         Dim stCreated As SYSTEMTIME
  54.  
  55.         For Each files In IO.Directory.GetFiles()
  56.             lFileHwnd = lopen(files, READ_WRITE)
  57.             GetFileTime(lFileHwnd, ftCreated, ftAccessed, ftModified)
  58.             FileTimeToSystemTime(ftCreated, stCreated)
  59.             With stCreated
  60.                 TextBox3.Text = .wDay & "." & .wMonth & "." & .wYear & ", " & .wHour & ":" & .wMinute & ":" & .wSecond & ":" & .wMilliseconds
  61.             End With
  62.         Next
  63.     End Sub

Ответить

Номер ответа: 6
Автор ответа:
 Sergey



Вопросов: 39
Ответов: 87
 Профиль | | #6 Добавлено: 05.05.09 15:45
Не работает! Выводит ошибку!
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 05.05.09 16:29
  1.         Dim cFileName As String
  2.         Dim cAlternate As String

Бага здесь.

Ответить

Номер ответа: 8
Автор ответа:
 Sergey



Вопросов: 39
Ответов: 87
 Профиль | | #8 Добавлено: 05.05.09 16:39
Что надо сделать?

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 05.05.09 21:49
cFileName As String * MAX_PATH
cAlternate As String * 14

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 05.05.09 23:50
1) В .NET нет строк фиксированной длины (точнее есть, но они делаются не так как делались в VB6)
2) My.Computer.FileSystem.GetName работает мгновенно потому что он просто выполняет операции над строкой и не выполняет никаких дейсвтий, связанных с файловой системой и диском.

Ответить

Номер ответа: 11
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #11 Добавлено: 06.05.09 00:43
С диском может и нет, но с копией файловой таблицы в памяти он точно что-то должен сделать :) хотябы прочитать название, времена и кучу аттрибутов.

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 06.05.09 00:49
>но они делаются не так
Steel Brand, а как? тоже вроде Public cAlternate As String * 14

  1. Private Const MAX_PATH As Int32 = 260
  2.  
  3. <StructLayout(LayoutKind.Sequential)> _
  4. Private Structure FILETIME
  5. Public dwLowDateTime As Int32
  6. Public dwHighDateTime As Int32
  7. End Structure
  8.  
  9. <StructLayout(LayoutKind.Sequential)> _
  10. Private Structure WIN32_FIND_DATA
  11. Public dwFileAttributes As Int32
  12. Public ftCreationTime As FILETIME
  13. Public ftLastAccessTime As FILETIME
  14. Public ftLastWriteTime As FILETIME
  15. Public nFileSizeHigh As Int32
  16. Public nFileSizeLow As Int32
  17. Public dwReserved0 As Int32
  18. Public dwReserved1 As Int32
  19. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH
  20. )> _
  21. Public cFileName As String
  22. Public cAlternate As String * 14
  23. End Structure

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 06.05.09 01:13
Smith пишет:
С диском может и нет, но с копией файловой таблицы в памяти он точно что-то должен сделать хотябы прочитать название, времена и кучу аттрибутов.

Smith, за минуту до того как написать свой пост, я смотрел исходный код функции GetName. Но если хочешь, можем поспорить на пару сотен баксов на тему с какой файловой табилцей она работает, я в принципе не против.

Ответить

Номер ответа: 14
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #14 Добавлено: 06.05.09 01:30
Пара сотен это твоя дежурная ставка? А чё так мелко, не чуЙствую уверенности в твоих двух сотнях :)
Я тож в принципе не против, если хочешь докажи мне что имя файла, время создания и последней модификации, а также атрибуты файла беруться не с диска(кэша).
Мне будет весьма любопытно это почитать.

Ответить

Номер ответа: 15
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #15 Добавлено: 06.05.09 02:15
Smith пишет:
Пара сотен это твоя дежурная ставка? А чё так мелко, не чуЙствую уверенности в твоих двух сотнях
Я тож в принципе не против, если хочешь докажи мне что имя файла, время создания и последней модификации, а также атрибуты файла беруться не с диска(кэша).
Мне будет весьма любопытно это почитать.

Smith, ты ведешь нечестную игру.

Это очевидно - мне нет никакого смысла пытаться доказать что черное - это белое. Потому что черное на самом деле это черное. И это очевидно. И мне и тебе.

Я вел речь именно о фукнции GetName. Об остальных функциях я тебе предоставляю возможность поспорить с кем-нибудь другим на форуме.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам