2009-05-11 21 views

Répondre

52

S'il vous plaît voir la fonction dir comme indiqué ci-dessus.

Veuillez noter que la fonction dir fonctionne sur les fichiers et pas uniquement sur les répertoires.

>> 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: Bon point. J'ai oublié de mentionner que vous pouvez également passer des noms de fichiers. – gnovice

+0

Et si le fichier se trouve dans votre répertoire actuel, vous pouvez simplement utiliser 'dir ('try.c')' sans vous soucier du chemin. –

7

Utilisez le fait que MatLab a accès à des objets Java:

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

Toujours travailler comparer à dir qui ne donne pas toujours une réponse. – k4lls

+1

Je suis curieux de voir où 'dir' échoue et cela réussit. Jusqu'à présent, j'ai toujours obtenu un résultat avec juste 'dir'. –

22

Vous pouvez utiliser la fonction DIR pour obtenir des informations de répertoire, qui comprend la taille des fichiers dans ce répertoire. Par exemple:

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 

Ou, puisque vous êtes à la recherche d'un seul fichier, vous pouvez faire ce que Elazar dit et juste passer un chemin absolu ou par rapport à votre fichier DIR:

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

Hé, tu as gagné un badge à cause de ma réponse (8> 3 * 2). ;-) –

+0

Malheureusement, non. Votre réponse devrait avoir au moins 10 upvotes, ce qui signifie que le mien devrait en avoir 20. Je ne pense pas qu'il y ait assez de gens sur SO qui sont intéressés par MATLAB pour ce genre de chiffres. Nous pouvons rêver si ... =) – gnovice

5

Si vous ne voulez pas coder en dur dans votre répertoire, vous pouvez utiliser l'outil intégré PWD pour trouver le répertoire courant, puis ajoutez votre nom de fichier à lui. Voir exemple ci-dessous:

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

Peut-être que dir a changé au fil du temps, mais actuellement vous n'avez pas besoin de vous inquiéter du nom complet de toute façon si votre fichier se trouve dans le répertoire courant. –

1

Ce code fonctionne pour tout fichier et répertoire (pas besoin de chemin absolu):

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

Peut-être que dir a changé au fil du temps, mais actuellement vous n'avez pas besoin de vous inquiéter du nom complet de toute façon si votre fichier se trouve dans le répertoire courant. –

1

La question semble indiquer que fopen/fread/.. est utilisé. Dans ce cas, pourquoi ne pas chercher à la fin du dossier et lire la position?

Exemple:

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 aurait pu fournir un raccourci ..

Plus sur ftell se trouvent here.

+0

Merci. (!) J'ai trouvé cela très utile étant donné que dans mon code j'ai un fichier d'un fichier ouvert pour travailler avec, pas un chemin de fichier. – MarcinKonowalczyk

-1

moyen facile de trouver la taille du fichier est: entrer ces cammands

K = imfinfo ('filename.formate');

size_of_file = K.FileSize

et obtenir la taille du fichier.

+1

Ne semble pas fonctionner en général. Semble être conçu pour fonctionner avec des fichiers graphiques seulement. –

Questions connexes