Fórum Função que retorna a capacidade do disquete #301351
31/10/2005
0
Obrigado..
Marco Salles
Curtir tópico
+ 0Posts
01/11/2005
Martins
Obrigado..[/quote:fe2838ca9f]
Marcos o disquete vazio tem uma capacidade fixa certo? Então não seria um opção vc verificar o tamanho dos arquivos q estiverem nesse disquete caso haja algum e subtrair da capacidade total do disquete comparando o saldo com o tamanho do seu arquivo texto, caso o disquete esteja vazio, é só verificar de o espaço disponível é menor do q seu arquivo texto, resguardando pq os tamanhos não podem ser iguais para evitar erro na leitura de header do disco.
Só uma idéia louca aqui, vou ver se isso na prática funciona.
Boa Sorte!!
Gostei + 0
01/11/2005
Massuda
Gostei + 0
01/11/2005
Martins
Mandou super bem [b:41aef9203b]Massuda[/b:41aef9203b], como sempre, hehehe :D
Dá para implementar algo bem interessante com DiskFree, DiskSize e pegando o tamnho do Arquivo, vai ficar Show!!!
Gostei + 0
01/11/2005
Adriano Santos
procedure TForm1.Button1Click(Sender: TObject); var F : File of Byte; Tamanho : Longint; S : String; begin AssignFile(f, ´C:\Winnt\System32\Calc.exe´); Reset(F); Tamanho := FileSize(F); //Onde : 0 = Corrente, 1 = A, 2 = B,... if Tamanho < (DiskFree(0) div 1024) then ShowMessage(´Tamanho do Arquivo: ´ + IntToStr(Tamanho) + #1310 + ´Espaço em disco: ´ + IntToStr((DiskFree(0) div 1024)) + 1310 + ´Dá pra gravar´) else ShowMessage(´Disco cheio´); CloseFile(f); end;
Gostei + 0
02/11/2005
Marco Salles
Mas na verdade eu estou querendo é comparar o tamanho de Uma lista do Tioi TStringList com o tamanho do espaço vazio do disquete.
Eu não sei qual a função que retorna o Tamano desta Lista
Tipo FileSize no caso de arquivos
Desde ja meus agadecimentos
Gostei + 0
02/11/2005
Massuda
var Tamanho: Integer; ... Tamanho := Length(SuaStringList.Text); ...
Gostei + 0
02/11/2005
Marco Salles
Beleza massuda , mas da para comparar isto com DiskFree(0) div 1024
Com sugerido pelo Adriano santos sem perda de confiabilidade ???
var Tamanho: Integer; ... Tamanho := Length(SuaStringList.Text) if Tamanho < (DiskFree(0) div 1024) then ShowMessage(´Da para gravar´) else ShowMessage(´Disco cheio´);
Gostei + 0
02/11/2005
Adriano Santos
Beleza massuda , mas da para comparar isto com DiskFree(0) div 1024
Com sugerido pelo Adriano santos sem perda de confiabilidade ???
var Tamanho: Integer; ... Tamanho := Length(SuaStringList.Text) if Tamanho < (DiskFree(0) div 1024) then ShowMessage(´Da para gravar´) else ShowMessage(´Disco cheio´);
Então [b:604111efb7]Marcos Salles[/b:604111efb7], não estou vendo dificuldades, pois as duas ´variáveis´, Tamanho e o resultado de DiskSize(0) div 1024, são do tipo Integer, isso significa que podem ser comparadas normalmente. Não entendi onde está sua preocupação ou dúvida.
Gostei + 0
03/11/2005
Marco Salles
A unica duvida é que apesar de integer e Longint ser definido entre o mesmo intervalo , qual é a diferença real entre essas duas definiçoes . Pois
var tamanho:Integer; OutroTipo:Longint; .... tamanho:=(DiskFree(0) div 1024); OutroTipo:=(DiskFree(0) div 1024);
[b:97c7f88392]Aparentemente é a mesma coisa.. [/b:97c7f88392]Então o p orque destas duas definiçoes :?: :?: :?: :?:
Gostei + 0
03/11/2005
Massuda
... Tamanho := Length(SuaStringList.Text) if Tamanho < (DiskFree(0) div 1024) then ...
Em outras palavras, Integer é um tipo de dado que depende da implementação do compilador, enquanto Shortint, Smallint, Longint, Int64, Byte, Word e Longword são tipos de dado cujo tamanho/capacidade são pré-definidos.
No código que você postou, tem outro ponto importante: a variável Tamanho contem um valor em bytes (resultado do Length) enquanto o (DiskFree(0) div 1024) resulta em um valor em kilobytes, ou seja, você está comparando coisas diferentes.
O correto seria, ou dividir tamanho por 1024 ou simplesmente usar o valor retornado por DiskFree sem dividir por 1024.
Gostei + 0
03/11/2005
Adriano Santos
... Tamanho := Length(SuaStringList.Text) if Tamanho < (DiskFree(0) div 1024) then ...
Em outras palavras, Integer é um tipo de dado que depende da implementação do compilador, enquanto Shortint, Smallint, Longint, Int64, Byte, Word e Longword são tipos de dado cujo tamanho/capacidade são pré-definidos.
No código que você postou, tem outro ponto importante: a variável Tamanho contem um valor em bytes (resultado do Length) enquanto o (DiskFree(0) div 1024) resulta em um valor em kilobytes, ou seja, você está comparando coisas diferentes.
O correto seria, ou dividir tamanho por 1024 ou simplesmente usar o valor retornado por DiskFree sem dividir por 1024.[/quote:56c1803e85]
[b:56c1803e85]Massuda[/b:56c1803e85] boa explicação. Tive a impressão de que estávamos criando uma tempestade em copo d´água no meu post anterior.
Gostei + 0
03/11/2005
Marco Salles
[b:9a2b4dabc6]Pelo que me foi passado , achei tb que seria fácil resolução.. [/b:9a2b4dabc6]A unica duvida que tinha ficado foi quanto a definição de tipos Integer e longint
Mas na pratica quando tento gravar um arquivo txt em um disquete que [size=18:9a2b4dabc6]esta cheio [/size:9a2b4dabc6], a comparação
[b:9a2b4dabc6]if Tamanho < (DiskFree(0) div 1024) then [/b:9a2b4dabc6]
:arrow: :arrow: :arrow:
[b:9a2b4dabc6][color=darkred:9a2b4dabc6]Esta retornando verdadeiro . Quando eu esperava que retornasse falso...[/color:9a2b4dabc6][/b:9a2b4dabc6]
Segue um Fragmento do meu código ::::::::::::::::::::::::::
var Tamanho: Integer; Lista:TStringLista; FileName:String; LogFile: TextFile; ... // Crio a Lista e coloco dados nela , blablabla... Tamanho := Length(Lista.Text) if Tamanho < (DiskFree(0) div 1024) then begin FileName:=´A:\TesteEmDelphi.txt; AssignFile (LogFile, Filename); Lista.SaveToFile(FileName); end else ShowMessage(´Disco cheio´);
:cry: :cry: :cry: :cry: :cry:
Como o Disco [size=18:9a2b4dabc6]esta cheio[/size:9a2b4dabc6] e o teste[b:9a2b4dabc6] if Tamanho < (DiskFree(0) div 1024) then [/b:9a2b4dabc6]não esta filtrando esta condição , obtenho um erro , quando tento fazer : :arrow: :arrow: :arrow:
[b:9a2b4dabc6]Lista.SaveToFile(FileName);[/b:9a2b4dabc6]
O Erro que obtenho é este :
[URL=http://imageshack.us][img:9a2b4dabc6]http://img176.imageshack.us/img176/3507/imagemdisquetecheio7gj.jpg[/img:9a2b4dabc6][/URL]
:?: :?: :?: :?: :?:
Pergunto então ::: O Que estou fazendo de errado , o que não estou fazendo , e sera que dá para confiar nesse teste
Tamanho := Length(Lista.Text) if Tamanho < (DiskFree(0) div 1024) then
:?: :?: :?: :?: :?: :?:
Gostei + 0
03/11/2005
Massuda
var Tamanho: Integer; Lista:TStringList; FileName:String; ... // Crio a Lista e coloco dados nela , blablabla... Tamanho := Length(Lista.Text) if Tamanho < DiskFree(0) then begin FileName:=´A:\TesteEmDelphi.txt; Lista.SaveToFile(FileName); end else ShowMessage(´Disco cheio´);
Gostei + 0
03/11/2005
Martins
Parametros do [b:9eb9713b69]DiskFree:[/b:9eb9713b69]
[color=darkred:9eb9713b69]
0 = Corrente
1 = A
2 = B
[/color:9eb9713b69]
Gostei + 0
03/11/2005
Martins
Parametros do [b:1e16be4704]DiskFree:[/b:1e16be4704]
[color=darkred:1e16be4704]
0 = Corrente
1 = A
2 = B
[/color:1e16be4704]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)