2014-09-10 39 views
6

Hepimizin bildiği gibi, Windows'daki dosya adları iki nokta üst üste ekleyemez. a, b ve word1 ('foo' ile) (boş): Bu komut dosyası ./temp dizinde üç dosya oluşturur Python'daki dosya adlarındaki kolon

import os 
os.chdir('./temp') 
names = ['a', 'b', 'word1: word2', 'c: file', 'd: file'] 

for name in names: 
    with open(name, 'w') as f: 
     f.write('foo') 

: Ancak, aşağıdaki örnek kodu ile çoğaltılabilir edilebileceğini, bir sorunla karşılaştık . Ayrıca, çıkarılabilir depolama alanı olan D:\'da file adlı bir dosya oluşturur. Bu, yönetici haklarının yazılmasını gerektiren C:\'da hiçbir şey oluşturmaz; Ancak, mevcut çalışma dizininde bir dosya oluşturur.

  1. Neden atılan herhangi bir istisna değildir (diğer yasak karakterlerle, ben IOError olsun):

    üç şeye anlamıyorum?

  2. word1 dosyası neden boş?
  3. Geçerli çalışma dizininde neden bir dosya oluşturulur?
+3

Bulunduğunuz noktaya oldukça teğettir (bu iyi bir soru), fakat lütfen dosyalar ile çalışırken 'with' kullanın. İyi uygulamalara yol açın! – Veedrac

+0

'' word1: word2 '', '' word2 '' adlı alternatif NTFS akışına depolar. Bunu "dir/R word1" ile kontrol edin. – eryksun

+1

'c: dosya ', C: sürücüsündeki geçerli çalışma dizininde'' file'' adlı bir dosya oluşturur. – eryksun

cevap

8

Windows NTFS, "akış" dosyasını desteklemektedir. Verileri temelde dosya dışında bir dosyaya eklersiniz ve normal şekilde görüntülenemezsiniz. "Word1: word2" dosyasını oluşturduğunuzda, "word2" gizli akışı "word1" e eklenir. Word1 dosyasını başka bir NTFS makinesine kopyaladıysanız, word2 verileri sizinle birlikte gelirdi

Buradan gidin http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx ve akış programını indirin. bu size o word2 gösterecektir Running Bu sayfa aynı zamanda akışları bahsediyor

kelime1 bağlı bir akışıdır: http://www.forensicfocus.com/dissecting-ntfs-hidden-streams

gerçekten, Not Defteri'ni kullanabilirsiniz ancak .txt uzantısını kullanmak gerekir kolayca Bunu kanıtlamak için:

file=open('word1.txt:word2.txt','w') 
file.write('Testing streams') 
file.close() 

Şimdi, cmd programını kullanarak, dizinleri dosyaları oluşturduğunuz yere değiştirin. Aşağıdakileri yazın:

c:\tmp> notepad word1.txt 

Boş bir dosya göreceksiniz. Şimdi, şu deneyin: Testing streams numaralı metni görmelisiniz.

+0

' yapmaya perfctly normaldir: open ('word1.txt ile ' : word2.txt ') f: print f.read() ' –

İlgili konular