Newsgroup: it.comp.lang.visual-basic
Titolo: funzione Dir

Mi sono accorto oggi che la riga:
x= Dir("G:\miofile.txt")
mi restituisce Vuoto anzichè "" quando il drive non è presente. A cosa potrebbe essere dovuto? 
Grazie per ogni info
 
-- 
Greg
 
 

 potrebbe essere dovuto? Grazie per ogni info
 
Provato con Dir$()?
 
-- 
Freccia@Bulldozer63 :D

 mi restituisce Vuoto anzichè "" quando il drive non è presente. A cosa potrebbe > essere dovuto? 
 
Al fatto che Dir restituisce un Variant, per cui "vuoto" o "" dipende da come hai dichiarato la variabile di ritorno.
 
Come già detto nell'altra risposta, Dir$ restituiesce esplicitamente String, e quindi non hai ambiguità


O esiste o non esiste il drive, dir restituisce sempre una stringa vuota se il file non esiste,
restituisce qualcosa solo se il file esiste.
Help
=================================================================
Dir Function
 
Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file 
attribute, or the volume label of a drive.
 
Syntax
Dir[(pathname[, attributes])]
 
The Dir function syntax has these parts:
 
Part Description
pathname Optional.String expression that specifies a file name - may include directory or folder, and drive. A 
zero-length string ("") is returned if pathname is not found.
====================================================================
 
 
 
 
 
-- 
http://freewarewiki.it
 
http://freewareonline.org
 
http://netuser.altervista.org
 
 

mi restituisce Vuoto anzichè "" quando il drive non è presente. A cosa potrebbe essere dovuto? 
 
Ti hanno già risposto sul tipo di dato che restituisce Dir, io invece ti
consiglio di non usarlo e per verificare l'esistenza di un file uso l'api
GetFileAttributes, tra l'altro puoi sapere se è una direcory e altre info
 
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA"
(ByVal lpFileName As String) As Long
 
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
 
x& = GetFileAttributes ("G:\miofile.txt")
 
If x& > 0 Then MsgBox ("ESISTE")
 
 
 
-- 
ciao
  Stefano

Il 07/10/15 20:05:59 Greg ha scritto:

Grandissimi come sempre, grazie a tutti.
 
-- 
Greg
 
 

Il 08/10/15 10.56.17 SB ha scritto:

Grazie, alla fine ho usato la funzione Api e va tutto bene, ma vorrei capire perchè non funziona 
la  Dir$ e la Dir
Ho provato a riscriverla cosi:
 
Dim aa As String
aa = Dir$("c:\prova.txt")
e restituisce "prova.txt"
 
mentre:
aa = Dir$("h:\prova.txt")
da errore 52 numero o nome di file non valido
 
-- 
Greg
 
 


Il motivo è semplice, perché esiste il drive H: ma non esiste il file, però se entrambi non esistono restituisce una 
stringa vuota.


 stringa vuota.
Anzi, non proprio non esiste, non è accessibile il drive (es. il cdrom), altrimenti restituisce una stringa vuota.


Il 08/10/15 23.26.31 salclem2 ha scritto:

Ma hai ragione, che sbadato. A furia di non usare più il cd-rom mi ero dimenticato che esistesse.
Invece il drive H: è li, vuoto ma è li.
Quindi la Dir$ può dare 3 risultati, non due! Grazie davvero
 
-- 
Greg
 
 

Il 08/10/15 10:56:17 SB ha scritto:

Ciao SB,
sto provando l'api che mi hai suggerito su due diversi pc, xp e seven 
tutti a 32 bit.
Per testare l'esitenza di un file va benissimo, sempre, ma se voglio 
testare anche gli attibuti del file (ed evitare cosi anche GetAttr) mi 
da risultati diversi:
Dim k as Long
k = GetFileAttributes ("G:\miofile.txt")
su XP mi restituisce 8224 e su Seven 32. Come mai?
 
-- 
Greg
 
 

su XP mi restituisce 8224 e su Seven 32. Come mai?
 
Dunque 32 in esadecimale è 20H o 0x20 a seconda del dialetto preferito, mentre
8224 è 2020H o 0x2020
 
Guardando MSDN
https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117%28v=vs.85%29.aspx
 
 
il 20H è il flag archive in tutti due i casi
mentre il 0x2000 significa FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, cioè
evidentemente xp non ha indicizzato il file mentre W7 si, oppure non hai attivo
quel servizio su 7.
 
In ogni caso è tutto ok.
 
 
-- 
ciao
  Stefano

Il 09/10/15 16.38.46 SB ha scritto:

Grazie per la delucidazione :)
 
-- 
Greg