2009-05-11 17 views

Respuesta

52

Por favor, vea la función dir como se indicó anteriormente.

Tenga en cuenta que la función dir funciona en archivos y no solo en directorios.

>> 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: Buen punto. Olvidé mencionar que también puedes pasar nombres de archivos. – gnovice

+0

Y si el archivo está en su directorio actual, puede simplemente usar 'dir ('try.c')' sin preocuparse por la ruta. –

7

uso del hecho de que MatLab tiene acceso a objetos de Java:

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

Siempre trabaje en comparación con un directorio que no siempre da una respuesta. – k4lls

+1

Tengo curiosidad por ver dónde 'dir' falla y esto tiene éxito. Hasta ahora siempre obtuve un resultado con solo 'dir'. –

22

Usted puede utilizar la función DIR para obtener la información del directorio, que incluye los tamaños de los archivos de ese directorio. Por ejemplo:

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 

O, ya que están en busca de un solo archivo, puede hacer lo Elazar dicho y sólo tiene que pasar una ruta absoluta o relativa al archivo de DIR:

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

Oye, ganaste una insignia por mi respuesta (8> 3 * 2). ;-) –

+0

Lamentablemente, no. Su respuesta debería tener al menos 10 votos positivos, lo que significa que el mío debería tener 20. No creo que haya suficiente gente en SO que esté interesada en MATLAB para que suceda ese tipo de números. Aunque podemos soñar ... =) – gnovice

5

Si no desea codificar en su directorio, puede utilizar el construido en la herramienta pwd para encontrar el directorio actual y luego agregar su nombre de archivo a la misma. Consulte el siguiente ejemplo:

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

Quizás dir cambió con el tiempo, pero actualmente no necesita preocuparse del nombre completo de todos modos si su archivo está en el directorio actual. –

1

Este código funciona para cualquier archivo y directorio (sin necesidad de ruta absoluta):

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

Quizás dir cambió con el tiempo, pero actualmente no necesita preocuparse del nombre completo de todos modos si su archivo está en el directorio actual. –

1

La pregunta parece indicar que fopen/fread/.. se utiliza. En este caso, ¿por qué no buscar hasta el final del archivo y leer el puesto?

Ejemplo:

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 podría haber proporcionado un acceso directo ..

Más sobre ftell se puede encontrar here.

+0

Gracias. (!) Lo he encontrado muy útil teniendo en cuenta que en mi código tengo un fileID de un archivo abierto para trabajar, no una ruta de archivo. – MarcinKonowalczyk

-1

manera fácil de encontrar el tamaño del archivo es: introducir estos cammands

K = imfinfo ('filename.formate');

size_of_file = K.FileSize

y obtener el tamaño del archivo.

+1

Parece que no funciona en general. Parece estar diseñado para funcionar solo con archivos gráficos. –

Cuestiones relacionadas