USB FLASHDİSK OKUMA YAZMA

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

https://drive.google.com/open?id=1ne4_s ... Pug7nydnsd

Remindeki gibi bir checkedlistbox da Flash diks listesini görmek ve işaretli olana checkedlistbox daki Flash disk e dosya aktarmak dosya silmek akatarılın dosyanın da görünmesini istemiyorum.Gizli dosyaları göster denilse bile.bunu nasıl yapabilirim.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

Merhaba,

- USB Flash bellek sürücü isimlerini öğrenmek için aşağıdaki gibi bir yöntem izleyebilirsiniz.

Kod: Tümünü seç

const
  IOCTL_STORAGE_QUERY_PROPERTY =  $002D1400;

type
  STORAGE_QUERY_TYPE = (PropertyStandardQuery = 0, PropertyExistsQuery, PropertyMaskQuery, PropertyQueryMaxDefined);
  TStorageQueryType = STORAGE_QUERY_TYPE;

  STORAGE_PROPERTY_ID = (StorageDeviceProperty = 0, StorageAdapterProperty);
  TStoragePropertyID = STORAGE_PROPERTY_ID;

  STORAGE_PROPERTY_QUERY = packed record
    PropertyId: STORAGE_PROPERTY_ID;
    QueryType: STORAGE_QUERY_TYPE;
    AdditionalParameters: array [0..9] of AnsiChar;
  end;
  TStoragePropertyQuery = STORAGE_PROPERTY_QUERY;

  STORAGE_BUS_TYPE = (BusTypeUnknown = 0, BusTypeScsi, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre,
    BusTypeUsb, BusTypeRAID, BusTypeiScsi, BusTypeSas, BusTypeSata, BusTypeMaxReserved = $7F);
  TStorageBusType = STORAGE_BUS_TYPE;

  STORAGE_DEVICE_DESCRIPTOR = packed record
    Version: DWORD;
    Size: DWORD;
    DeviceType: Byte;
    DeviceTypeModifier: Byte;
    RemovableMedia: Boolean;
    CommandQueueing: Boolean;
    VendorIdOffset: DWORD;
    ProductIdOffset: DWORD;
    ProductRevisionOffset: DWORD;
    SerialNumberOffset: DWORD;
    BusType: STORAGE_BUS_TYPE;
    RawPropertiesLength: DWORD;
    RawDeviceProperties: array [0..0] of AnsiChar;
  end;
  TStorageDeviceDescriptor = STORAGE_DEVICE_DESCRIPTOR;


function GetBusType(Drive: AnsiChar): TStorageBusType;
var
  H: THandle;
  Query: TStoragePropertyQuery;
  dwBytesReturned: DWORD;
  Buffer: array [0..1023] of Byte;
  sdd: TStorageDeviceDescriptor absolute Buffer;
  OldMode: UINT;
begin
  Result := BusTypeUnknown;

  OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    H := CreateFile(PChar(Format('\\.\%s:', [AnsiLowerCase(string(Drive))])), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
      OPEN_EXISTING, 0, 0);
    if H <> INVALID_HANDLE_VALUE then
    begin
      try
        dwBytesReturned := 0;
        FillChar(Query, SizeOf(Query), 0);
        FillChar(Buffer, SizeOf(Buffer), 0);
        sdd.Size := SizeOf(Buffer);
        Query.PropertyId := StorageDeviceProperty;
        Query.QueryType := PropertyStandardQuery;
        if DeviceIoControl(H, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(Query), @Buffer, SizeOf(Buffer), dwBytesReturned, nil) then
          Result := sdd.BusType;
      finally
        CloseHandle(H);
      end;
    end;
  finally
    SetErrorMode(OldMode);
  end;
end;


procedure GetUsbDrives(List: TStrings);
var
  DriveBits: set of 0..25;
  I: Integer;
  Drive: AnsiChar;
begin
  List.BeginUpdate;
  try
    Cardinal(DriveBits) := GetLogicalDrives;

    for I := 0 to 25 do
      if I in DriveBits then
      begin
        Drive := AnsiChar(Chr(Ord('a') + I));
        if GetBusType(Drive) = BusTypeUsb then
          List.Add(string(Drive));
      end;
  finally
    List.EndUpdate;
  end;
end;
- Sürücünün toplam kapasitesini aşağıdaki Windows API fonksiyonunu kullanarak öğrenebilirsiniz:

Kod: Tümünü seç

GetDiskFreeSpaceEx()
- Dosya sistemi türü ve etiket bilgisini "GetVolumeInformation()" Windows API fonksiyonunu ile öğrenebilirsiniz. Kolay kullanım için aşağıdaki gibi bir prosedür hazırlanabilir:

Kod: Tümünü seç

procedure GetDriveInfo(const Drive: string; out oFileSystemName: string; out oVolumeName: string);
var
  VolumeSerialNumber: DWORD;
  MaximumComponentLength: DWORD;
  FileSystemFlags: DWORD;
  VolumeName: PChar;
  FileSystemName: PChar;
begin
  GetMem(VolumeName, MAX_PATH);
  try
    GetMem(FileSystemName, MAX_PATH);
    try
      GetVolumeInformation( PChar(Drive), VolumeName, MAX_PATH, @VolumeSerialNumber,
          MaximumComponentLength, FileSystemFlags, FileSystemName, MAX_PATH);
      oVolumeName := StrPas(VolumeName);
      oFileSystemName := StrPas(FileSystemName);
    finally
      FreeMem(FileSystemName);
    end;
  finally
    FreeMem(VolumeName);
  end;
end;
Aşağıdaki gibi bir kod ile ekranda ilgili bileşen içinde istediğimiz bilgileri gösterebiliriz:

Kod: Tümünü seç

procedure TForm1.btnGetUsbDriveListClick(Sender: TObject);
const
  GB: Int64 = 1024*1024*1024;
var
  I: Integer;
  FreeSpace: Int64;
  Available: Int64;
  Volume: string;
  FS: string;
begin
  GetUsbDrives(CheckListBox1.Items);

  // Sürücü harflerini daha anlaşılır hale getir
  for I := 0 to Pred(CheckListBox1.Items.Count) do
  begin
    CheckListBox1.Items[I] := CheckListBox1.Items[I].ToUpper() + ':\';
    if System.SysUtils.GetDiskFreeSpaceEx(PChar(CheckListBox1.Items[I]), FreeSpace, Available, nil) then
    begin
      GetDriveInfo(CheckListBox1.Items[I], FS, Volume);
      CheckListBox1.Items[I] := CheckListBox1.Items[I] + Format(' %s ( %2.2f GB ) %s', [FS, (Available / GB), Volume]);
    end;
  end;
end;
- İlgili sürücüye dosya kopyalamak için System.IOUtils içindeki TFile.Copy() prosedürünü kullanabilirsiniz.

Ancak
Sistem üzerinde dosyanın gözükmemesini sağlamak her dosya sistemi için mümkün değildir. Ayrıca bilgili kişiler bu dosyaları dahi görüp okuyabilirler. Bunun yerine kopyalayacağınız bilgileri şifrelenmiş şekilde kopyalamayı deneyebilirsiniz.

Dosya kopyalama işlemleri dışındakileri yapan örnek Delphi 10.2.3 projesini ekte bulabilirsiniz.
Dosya ekleri
usb_listesi_okuma.7z
(2.28 KiB) 58 kere indirildi
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

çok teşekkürler ertank.Kod ve uygula dosyan için.Takıldığında otomatik nasıl görünür kodu var mı.

Kod: Tümünü seç

 INIDosya := TIniFile.Create('C:\Database.ini');
   INIDosya.WriteString('Okul Adı','Şifre',Edit1.Text );
C:\ altına ini dosyası açıyorum burada usb deki F,G.. sürücülerinin harfleri C:\Database.ini yerine nasıl eklenir.checklistbox daki yani F:\Database.ini+G:\Database.ini+.... gibi bütün flasların altına aynı ini dosyası atacağım.

birde atılan ini dosyası çok küçük boyutta ve bu dosyanın gizli kalmasını istiyorum.Ama gizli dosya şeklinde değil.kimse görmeyecek şekilde.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

Yukarıdaki mesajımın sonunda belirtmiştim. "Kimse göremeyecek şekilde" kısmı çok mümkün değil. Bunun yerine şifrelenmiş dosya kullanabilirsiniz.

Diğer sorunuzu anlayamadım. Daha detaylı şekilde sormanız mümkün mü?
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

1.sorum Flash disk takıldıgında otomatik checkboxta görünmesi cıkartıldığnda kaybolması
2.sorum Flashfisk F Olarak gözüyor örneğin F:\Dabase.ini (flash kök dizini) şeklinde bir dosya kaydetmek istiyorum.Bunu nasıl yapabilirim F G H gibi kök dizinler olduğunda hangi kök dizin secili ise ona ini dosyası atacak
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

Unit EZCrypt;

{modeled by Ben Hochstrasser(bhoc@surfeu.ch) after some code snippet from borland}

interface

uses Windows, Classes;

type
  TWordTriple = Array[0..2] of Word;

function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
function TextEncrypt(const s: string; Key: TWordTriple): string;
function TextDecrypt(const s: string; Key: TWordTriple): string;
function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;

implementation

function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
  pIn, pOut: ^byte;
  i : Cardinal;
begin
  if SrcSize = TargetSize then
  begin
    pIn := Src;
    pOut := Target;
    for i := 1 to SrcSize do
    begin
      pOut^ := pIn^ xor (Key[2] shr 8);
      Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
      inc(pIn);
      inc(pOut);
    end;
    Result := True;
  end else
    Result := False;
end;

function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
  pIn, pOut: ^byte;
  i : Cardinal;
begin
  if SrcSize = TargetSize then
  begin
    pIn := Src;
    pOut := Target;
    for i := 1 to SrcSize do
    begin
      pOut^ := pIn^ xor (Key[2] shr 8);
      Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
      inc(pIn);
      inc(pOut);
    end;
    Result := True;
  end else
    Result := False;
end;

function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
var
  bOK: Boolean;
begin
  SetLength(Result, Length(s));
  if Encrypt then
    bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
  else
    bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
  if not bOK then Result := '';
end;

function FileCrypt(InFile, OutFile: String; Key: TWordTriple; Encrypt: Boolean): boolean;
var
  MIn, MOut: TMemoryStream;
begin
  MIn := TMemoryStream.Create;
  MOut := TMemoryStream.Create;
  Try
    MIn.LoadFromFile(InFile);
    MOut.SetSize(MIn.Size);
    if Encrypt then
      Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key)
    else
      Result := MemoryDecrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key);
    MOut.SaveToFile(OutFile);
  finally
    MOut.Free;
    MIn.Free;
  end;
end;

function TextEncrypt(const s: string; Key: TWordTriple): string;
begin
  Result := TextCrypt(s, Key, True);
end;

function TextDecrypt(const s: string; Key: TWordTriple): string;
begin
  Result := TextCrypt(s, Key, False);
end;

function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
begin
  Result := FileCrypt(InFile, OutFile, Key, True);
end;

function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
begin
  Result := FileCrypt(InFile, OutFile, Key, False);
end;
u
sitede bu şekilde bir unit var metin yada dosya sifreleme için hazır unit kodu bunu nasıl kullalnabiliriz.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

haydarxxx yazdı: 24 Nis 2018 05:36 1.sorum Flash disk takıldıgında otomatik checkboxta görünmesi cıkartıldığnda kaybolması
Ekteki uygulamayı inceleyebilirsiniz. Aşağıdaki kaynaktan faydalanmaktadır:
http://nitemsg.blogspot.com.tr/2011/01/ ... t-you.html
haydarxxx yazdı: 24 Nis 2018 05:36 2.sorum Flashfisk F Olarak gözüyor örneğin F:\Dabase.ini (flash kök dizini) şeklinde bir dosya kaydetmek istiyorum.Bunu nasıl yapabilirim F G H gibi kök dizinler olduğunda hangi kök dizin secili ise ona ini dosyası atacak
Örnek kodlar arasındaki procedure GetUsbDrives(List: TStrings); prosedürünü kullanabilirsiniz. Bu size bilgisayara takılı olan USB belleklerin sürücü harf listesini verecektir. Liste içeriği küçük harf olacaktır.
Dosya ekleri
usb_detection.7z
(3.41 KiB) 53 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

haydarxxx yazdı: 24 Nis 2018 09:33 sitede bu şekilde bir unit var metin yada dosya sifreleme için hazır unit kodu bunu nasıl kullalnabiliriz.
Bu şifreleme yöntemi güvenli değil. Ekteki uygulama ile test edebilirsiniz. Şifrelenmiş dosya halen anlaşılır derecede okunabilir oluyor. Daha kabul görmüş AES128, AES256 gibi yöntemlerden birini denemenizde fayda var.

Sitede daha önce şifreleme ile ilgili birçok kullanılabilir kod paylaşımı olmuştu. Arama yapmanızı tavsiye ederim.
Dosya ekleri
ezcrypt.7z
(1.79 KiB) 57 kere indirildi
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

şifrleme :(( hiç bir işe yaramıyor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

Key değişkeni için tanımlanan rakamları yüksek değerler olarak verir iseniz şifreleme yapıyor. Ben aşağıdaki gibi denediğimde şifrelenmiş dosya elde ettim.

Kod: Tümünü seç

  Key[0] := 10;
  Key[1] := 200;
  Key[2] := 3000;
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

denedim ama çift tıkladığımda dosya açılıyor.şifreleme de bir şifre girişi olası gerekmiyormu yada dosyaya çift tıkladığımızda şifre istemesi gibi :(
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

usb kodları çok işime yaradı ertank.Flas cıkartıldığında F sürücüsü yok uyarısı nasıl verdiririz
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen ertank »

50 numaralı satırdaki

Kod: Tümünü seç

  if Inserted then
kontrolünü aşağıdaki gibi yaparsanız çıkarıldığını algılarsınız.

Kod: Tümünü seç

  if not Inserted then
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: USB FLASHDİSK OKUMA YAZMA

Mesaj gönderen haydarxxx »

teşekkürler
Cevapla