Newsgroup: it.comp.lang.visual-basic
Titolo: [Forse o.t.] anzi sicuramente O.T. :)))

Ciao ragaz ho una domanda un po insolita da farvi.
Volevo sapere se c'è il modo per falsificare la dimensione di un file vi
spiego:
Ho un file di testo di un 1k ma il sistema operativo deve credere invece che
sia di 1000Mb ad esempio :))) (nelle proprietà del file deve comparire
1000Mb invece di 1K :)))
C'è il modo di farlo? Mi hanno parlato di filesystem ecc...
Cosa mi dite???
Grazie per l'aiuto e scusate per O.T. ;))))))
Ciao e un saluto a tutto il N.G.

C'č il modo di farlo? Mi hanno parlato di filesystem ecc...
Poche idee, ma confuse ;-)
Si riferivano agli sparse files, possibili nel mondo windows con il filesystem NTFS
da Windows 2000 in su.
Occorre creare il file con CreateFile e passare l' handle cosi' ottenuto
a DeviceIOControl, impostando il flag FSCTL_SET_SPARSE.
Trovi i dettagli sul platform sdk.
Buon divertimento ;-)
-- 
ciao, hal.sdk
Come crearli?


Ho cercato su internet maggiori info su questi sparse file :))) Ho trovato
una utility che li crea :O soltanto che i file creati hanno davvero quella
dimensione..
Forse mi sono spiegato male nello scorso post:
io vorrei che un file abbia 1k reali di spazio utlizzato sul disco ma poi
quando ad esempio si clikka su proprieta file venga scritto 10000Mb invece
di 1k :)))
Questo programma (bigfile) invece creava veri e propri file da 1Gb, 2Gb
ecc...
Grazie per aver risposto
CIAO :)))))

P.s. Kova e Giovanni sono la stessa persona :)))) (Dipende da dove mi trovo
Ufficio/Casa)
:)))))
CiAo

dimensione..
Uhm, come hai misurato la dimensione dei file creati?
Occorre GetCompressedFileSize per conoscere la reale dimensione del file,
se usi p. es. FileLen di vb hai la dimensione apparente.
A meno che il programma che hai provato non abbia fallito qualcosa.
Che programma e'?
-- 
ciao, hal

 file venga scritto 10000Mb invece di 1k :)))
<code>
Const FSCTL_SET_SPARSE = 590020
Dim h As Long
Dim dw As Long
Dim ldist As Long
h = CreateFile("C:\pippo.txt", GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, 0, 0)
Call DeviceIoControl(h, FSCTL_SET_SPARSE, ByVal 0&, 0, ByVal
0&, 0, dw, ByVal 0&)
ldist = 3072
Call SetFilePointer(h, 0, ldist, FILE_BEGIN)
Call SetEndOfFile(h)
Call CloseHandle(h)
</code>
Questo codice crea uno sparse file da 12 TB (12 Terabyte). Le
dichiarazioni le trovi con l'API viewer (ti ho messo l'unica
che non trovi). La spiegazione delle funzioni (ed i parametri
da utilizzare per creare il file delle dimensioni che vuoi tu)
le trovi su MSDN.
P.S. Il tutto funziona *solo* con NTFS 5 (win2000/XP)
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.

 P.S. Il tutto funziona *solo* con NTFS 5 (win2000/XP)
Io uso Win2000 solamente che l'hdd principale (dove è installato il SO) è
Fat mentre ho il secondo HDD che è formatatto in NTFS
Ovviamente il Createfile l'ho fatto sul secondo hdd :)
Dove sbaglio????
Di nuovo grazie a tutti e un saluto a tutto il N.G. :)))) CIAO

Dove sbaglio????
Nell' attesa che ad H.P.L. o a qualcun altro venga un' idea migliore,
potresti, in caso di fallimento, chiamare GetLastError() e vedere che
cosa da.
Eventualmente facci sapere ...
A proposito, se hai preso le dichiarazioni dell' API viewer e le hai lasciate
cosi' come sono, e' possibile che abbiano contribuito al fallimento dell' operazione.
Gia' che ci sei posta le Declares, sospetto che ci sia qualche ByRef di troppo
in quelle che hai usato.
-- 
ciao, hal.dll

 in quelle che hai usato.
:-))) Eccole:
Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal
lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As
Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long,
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long,
ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal
dwMoveMethod As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As
Long
Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long,
ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As
Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As
Long, lpOverlapped As Any) As Long
Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long
Bah spero di non aver sbagliato... :->>>>
Grazie ancora CIAO

Kova wrote:
Vedrai che Err.Lastdllerror ti restituisce 998 (Accesso a
posizione di memoria non valido).
Questo perché non utilizzando la struttura SECURITY_ATTRIBUTES
della CreateFile avevo modificato la dichiarazione, e quindi
gli passavo semplicemente 0 per indicare un puntatore null.
Sostituisci il mio codice con questo:
h = CreateFile("C:\pippo.txt", GENERIC_WRITE, 0, ByVal 0&,
CREATE_ALWAYS, 0, 0)


 Dove sbaglio????
Era una mia modifica (che non mi ricordavo) alla dichiarazione
della CreateFile. Ti ho scritto tutto nell'altro messaggio.


H.P.L. ho provato la tua modifica ma mi da sempre come valore di h = -1 ho
usate getlasterror e mi da Errore numero 6 che dovrebbe essere Invalid
Handle Specified :)))
Grazie ancora per l'auito CIAO :)
Io ci provo: Non è che il problema sta nel fatto che l'HDD dove sta WIN2000
e Fat e l'HDD dove gli dico di fare createfile è NTFS???

 createfile è NTFS???
Non penso che questo possa creare problemi.


 la CreateFile.
Già hai ragione ;)))) Infatti mi da errore 87 :O
CIAO

 Già hai ragione ;)))) Infatti mi da errore 87 :O
87 = parametro non corretto.
Per tagliare la testa al toro, ti scrivo tutto il codice,
comprese le dichiarazioni, testato e funzionante sul mio PC:
<code>
Private Declare Function CreateFile Lib "kernel32" Alias
"CreateFileA" (ByVal lpFileName As String, ByVal
dwDesiredAccess As Long, ByVal dwShareMode As Long,
lpSecurityAttributes As Any, ByVal dwCreationDisposition As
Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile
As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal
hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As
Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal
nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped
As Any) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal
hFile As Long, ByVal lDistanceToMove As Long,
lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As
Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal
hFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal
hObject As Long) As Long
Private Const GENERIC_WRITE = &H40000000
Private Const CREATE_ALWAYS = 2
Private Const FILE_BEGIN = 0
Private Const FSCTL_SET_SPARSE = 590020
Dim h As Long
Dim dw As Long
Dim ldist As Long
h = CreateFile("C:\pippo.txt", GENERIC_WRITE, 0, ByVal 0&,
CREATE_ALWAYS, 0, 0)
Call DeviceIoControl(h, FSCTL_SET_SPARSE, ByVal 0&, 0, ByVal
0&, 0, dw, ByVal 0&)
ldist = 3072
Call SetFilePointer(h, 0, ldist, FILE_BEGIN)
Call SetEndOfFile(h)
Call CloseHandle(h)
</code>
Ciao.


FUNZIONAAAA Sei un mito :))))))))))))
Ora vedo dove sbagliavo
GRAZIE di Tutto
:)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
)))))

> > P.S. Il tutto funziona *solo* con NTFS 5 (win2000/XP)
Io però ricordo che tempo fa avevo un cd con le 3 versioni del VB5:
Learning, Professional ed Enterprise.
Che ci crediate o no, dopo aver copiato interamente sul disco fisso la
cartella dell'enterprise, ho visto che occupava 600MB e passa.... e visto
ciò ho controllato la dimensione delle 3 cartelle sul cd: ognuna occupava
intorno ai 600 MB.
Come è possibile? Parlo di Win95/98 eh???

Vegeta ha scritto:
[cut]
Ehm, temo che ci sia un qui quo qua ;-)
Incollo una definizione di sparse file presa dal psdk:
Sparse Files
A file (typically very large) in which a lot of data is all zeros is said to contain a sparse data set. 
An example is a matrix in which some or much of the data is zeros. 
Applications that use sparse data sets include image processors and high-speed databases. 
In versions of NTFS prior to version 5.0, the portions of the file that did not contain useful 
data occupied valuable disk space.
The file compression introduced in NTFS 3.51 is a partial solution to the problem. 
The portions of the file that do not contain useful data are set to zero, and file compression 
compacts the non-data portions. However, file compression has its own drawbacks. 
Access time may increase due to data compression and decompression.
NTFS 5.0 introduces another solution, called a sparse file. 
When the sparse file facilities are used, the system does not allocate hard drive space 
to a file except in regions where it contains something other than zeros. 
The default data value of a sparse file is zero.
-- 
ciao, hal

> Ehm, temo che ci sia un qui quo qua ;-)
Si ma restando in tema di file apparentemente grandi (però vuoti) mi son
ricordato di quel mio cd. Cosa potete dirmi a riguardo? Come mai su un cd di
650 MB c'erano 3 cartelle di 600 MB l'una? E' possibile fare una cosa
simile? Se si, come?

Vegeta ha scritto:

Probabilmente avevi i cluster a 16 o 32 K.
-- 
ciao, hal
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ciao, hal
ciao, Vegeta

 compacts the non-data portions. However, file compression has its own drawbacks.
[CUT]
...il che mi ricorda un bel sistema per massacrare certi antivirus. ;-)
Bye, G.