webForumDet fria alternativet

läsa och editera direkt från fil

.NET

5 svar · 269 visningar · startad av Nexus86

Medlem sedan okt. 20023 030 inlägg
Frågan#1

Hur gör man för att ta reda på vart på hårddisken en fil finns, läsa filen och redigera direkt på hårddisken så att det inte längre finns några spår av att man har haft den filen. T.ex. så kan man ersätta den med bara en massa ASCII 0-tecken (00000000 i binärt, vbNullChar i VB).

Medlem sedan juni 20022 599 inlägg
#2

läsa filen och redigera direkt på hårddisken

Att ägna sig åt absolut/sektorsvis skrivning till disk från VB låter väldigt farligt och väldigt omöjligt. Det går inte att göra öht i user-mode på NT-baserade system.

Och frågan är varför du egentligen behöver det. Vill du bara utplåna alla spår av en fils innehåll så borde det räcka att öppna, slumpvis skriva över (hela filens längd), och stänga filen ett 20-tal ggr. För att utplåna filens namn borde det räcka med att döpa om den ett antal ggr.

Om du vill gå mer på djupet så finns här lite att läsa om saken + källkod i ditt favoritspråk (C). Koden är bra kommenterad, så man förstår ungefär vad det är dom gör.

Medlem sedan okt. 20023 030 inlägg
#3

niko skrev:

källkod i ditt favoritspråk (C).

Du har redan börjat lära känna mig. :e

Men jag tänkte även på hur man kan få reda på vilka kluster, m.m. som är oallokerade, dvs som inte används av någon fil för då kan man göra samma sak även där.

Medlem sedan juni 20022 599 inlägg
#4

Du menar funktionen CleanFreeSpace? Jo, den verkar intressant. Fast koden kör ju en del anrop direkt mot filsystemdrivern (via NtFsControlFile) så om du planerar att göra egna ändringar i koden så bör du nog se till att ha Windows-CD:en nära till hands. (Om du inte har en sekundär disk att leka med.)

Medlem sedan okt. 20023 030 inlägg
#5

Jag råkar just ha en del sekundära hårddiskar att leka med. :)
Men vart finns det info och syntaxer om den funktionen då?

Medlem sedan juni 20022 599 inlägg
#6

Nexus86 skrev:

Men vart finns det info och syntaxer om den funktionen då?

Vet inte riktigt, faktiskt. Som det står är det en odokumenterad funktion för att skicka kontrollkoder direkt in i NTFS-filsystemsdrivern. Fem av kontrollkoderna finns deklarerade i "defrag.h", vill du veta vilka övriga som finns och vad du kan göra med dem så får du nog fixa MS File System Driver Dev. Kit, misstänker jag.

Fast nu känns som jag lett dig lite på villovägar. Att skriva direkt till lediga diskkluster är inget du vill eller kan göra i en vanlig app. Funktionen CleanFreeSpace använder dessutom ett mycket mer normalt och snällare sätt: Den allokerar en vanlig fil i det lediga utrymmet, fyller filen med skräp tills det inte går mer och tar sen bort filen.

Om du vill skriva en app som deletar data från oallokerade diskdelar så är det enklast (minst svårt) om du flyttar över alla funktionerna (CleanFreeSpace osv..) till en C-Dll och sen anropar dem från VB.

(Att porta hela koden till VB går nog inte eftersom den använder funktionspekare.)

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)