2009-05-11 14 views

risposta

52

Vedere la funzione dir come indicato sopra.

Si noti che la funzione dir funziona solo su file e non su directory.

>> s = dir('c:\try.c') 

s = 

     name: 'try.c' 
     date: '01-Feb-2008 10:45:43' 
     bytes: 20 
     isdir: 0 
    datenum: 7.3344e+005 
+0

+1: buon punto. Ho dimenticato di menzionare che puoi anche passare i nomi dei file. – gnovice

+0

E se il file si trova nella tua directory corrente, puoi semplicemente usare 'dir ('try.c')' senza preoccuparti del percorso. –

7

Utilizzare il fatto che MatLab ha accesso a Java Objects:

myFile = java.io.File('filename_here') 
flen = length(myFile) 
+0

Lavorare sempre confrontare con dir che non dà sempre una risposta. – k4lls

+1

Sono curioso di vedere dove 'dir' fallisce e questo succede. Finora ho sempre ottenuto un risultato con solo 'dir'. –

22

È possibile utilizzare la funzione di DIR per ottenere le informazioni di directory, che include le dimensioni dei file in quella directory. Per esempio:

dirInfo = dir(dirName); %# Where dirName is the directory name where the 
         %# file is located 
index = strcmp({dirInfo.name},fileName); %# Where fileName is the name of 
              %# the file. 
fileSize = dirInfo(index).bytes; %# The size of the file, in bytes 

Oppure, dal momento che sono alla ricerca di un solo file, si può fare quello Elazar detto e basta passare un percorso assoluto o relativo al file al DIR:

fileInfo = dir('I:\kpe\matlab\temp.m'); 
fileSize = fileInfo.bytes; 
+0

Ehi, hai guadagnato un badge a causa della mia risposta (8> 3 * 2). ;-) –

+0

Purtroppo no. La tua risposta dovrebbe avere almeno 10 upvotes, il che significa che il mio dovrebbe avere 20. Non penso che ci siano abbastanza persone su SO che sono interessate a MATLAB per fare in modo che questi numeri possano accadere. Possiamo sognare però ... =) – gnovice

5

Se non si desidera hardcode nella directory, è possibile utilizzare lo strumento costruito in pwd per trovare la directory corrente e quindi aggiungere il nome del file ad esso. Vedere il seguente esempio:

FileInfo = dir([pwd,'\tempfile.dat']) 
FileSize = FileInfo.bytes 
+0

Forse dir cambiato nel tempo, ma al momento non è necessario preoccuparsi del nome completo comunque se il file si trova nella directory corrente. –

1

Questo codice funziona per qualsiasi file e directory (senza bisogno di percorso assoluto):

dirInfo=dir(pwd); 
    index = strcmp({dirInfo.name},[filename, '.ext']); % change the ext to proper extension 
    fileSize = dirInfo(index).bytes 
+0

Forse dir cambiata nel tempo, ma al momento non è necessario preoccuparsi del nome completo comunque se il file si trova nella directory corrente. –

1

La questione sembra indicare che fopen/fread/.. viene utilizzato. In questo caso, perché non cercare fino alla fine del file e leggere la posizione?

Esempio:

function file_length = get_file_length(fid) 
% extracts file length in bytes from a file opened by fopen 
% fid is file handle returned from fopen 

% store current seek 
current_seek = ftell(fid); 
% move to end 
fseek(fid, 0, 1); 
% read end position 
file_length = ftell(fid); 
% move to previous position 
fseek(fid, current_seek, -1); 

end 

Matlab avrebbe potuto fornire una scorciatoia ..

Altro su ftell può essere trovato here.

+0

Grazie. (!) L'ho trovato molto utile considerando che nel mio codice ho un fileID di un file aperto con cui lavorare, non un percorso di file. – MarcinKonowalczyk

-1

modo semplice per trovare la dimensione del file è: immettere questi cammands

K = imfinfo ('filename.formate');

size_of_file = K.FileSize

e ottenere la dimensione del file.

+1

Non sembra funzionare in generale. Sembra progettato per funzionare solo con file grafici. –

Problemi correlati