Как получить имя, связанное с открытой ручкой

Использование String toString: всякий раз, когда вам требуется исследовать конструктор с именем value в форме String, вы можете просто использовать String toString ... для примера ...

package pack1;

import java.util.*;

class Bank {

    String n;
    String add;
    int an;
    int bal;
    int dep;

    public Bank(String n, String add, int an, int bal) {

        this.add = add;
        this.bal = bal;
        this.an = an;
        this.n = n;

    }

    public String toString() {
        return "Name of the customer.:" + this.n + ",, "
                + "Address of the customer.:" + this.add + ",, " + "A/c no..:"
                + this.an + ",, " + "Balance in A/c..:" + this.bal;
    }
}

public class Demo2 {

    public static void main(String[] args) {

        List<Bank> l = new LinkedList<Bank>();

        Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
        Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
        Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
        Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
        Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
        l.add(b1);
        l.add(b2);
        l.add(b3);
        l.add(b4);
        l.add(b5);
        Iterator<Bank> i = l.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
    }

}

.. скопируйте эту программу в свое затмение и запустите ее ... вы получите идеи о String toString ...

13
задан Aaron Maenpaa 16 September 2008 в 07:18
поделиться

4 ответа

редактирование спасибо за комментарии об этом являющемся Vista или Сервером 2008 только. Я пропустил это на странице. Угадайте, что я должен был читать целый статья ;)

, похоже, что можно использовать GetFileInformationByHandleEx () для получения этой информации.

Вы, вероятно, захотите сделать что-то как:

GetFileInformationByHandleEx( fileHandle, FILE_NAME_INFO, lpFileInformation, sizeof(FILE_NAME_INFO));

Двойная проверка страница MSDN для проверки я не ввел в заблуждение Вас слишком ужасно :)

С наилучшими пожеланиями,

Taylor

4
ответ дан Taylor Price 16 September 2008 в 07:18
поделиться

FWIW, вот то же решение из статьи MSDN, предложенной Prakash в Python с помощью замечательного ctypes:

from ctypes import *
# get handle to  c:\boot.ini to test
handle = windll.kernel32.CreateFileA("c:\\boot.ini", 0x80000000, 3, 0, 3, 0x80, 0)
hfilemap = windll.kernel32.CreateFileMappingA(handle, 0, 2, 0, 1, 0)
pmem = windll.kernel32.MapViewOfFile(hfilemap, 4, 0, 0, 1)
name = create_string_buffer(1024)
windll.psapi.GetMappedFileNameA(windll.kernel32.GetCurrentProcess(), pmem, name, 1024)
print "The name for the handle 0x%08x is %s" % (handle, name.value)
# convert device name to drive letter
buf = create_string_buffer(512)
size = windll.kernel32.GetLogicalDriveStringsA(511, buf)
names = buf.raw[0:size-1].split("\0")
for drive in names:
    windll.kernel32.QueryDosDeviceA(drive[0:2], buf, 512)
    if name.value.startswith(buf.value):
        print "%s%s" % (drive[0:2], name.value[len(buf.value):])
        break
1
ответ дан Max Caceres 16 September 2008 в 07:18
поделиться

Если необходимо сделать это на Win32 предварительная Vista или Server 2008, посмотреть эти GetMappedFileName(...) функция, которая является одним из содержащихся в полном порядке секретов в Win32. С немного C/C++- fu, Вы можете память отображать небольшую часть рассматриваемого файла, и затем передавать тот дескриптор этой функции.

кроме того, на Win32, Вы не можете действительно удалить файл, который открыт (открываться/удалять связь проблема, упомянутая на другом ответе) - можно отметить его для удаления на завершении, но это будет все еще бродить вокруг, пока его последний открытый дескриптор не закрывается. Не знайте при отображении (через mmap(...)), файл в этом случае помог бы, потому что он должен указать назад на физический файл...

- = - James.

0
ответ дан 16 September 2008 в 07:18
поделиться

На unixes нет никакого реального способа надежного выполнения этого. В Unix с традиционной файловой системой Unix можно открыть файл и затем удалить связь с ним (удалите его запись из каталога), и используйте его, в которой точке имя не хранится нигде. Кроме того, потому что файл может иметь несколько hardlinks в файловую систему, каждое из имен эквивалентны, поэтому после того как у Вас есть просто открытый дескриптор, это не было бы ясно, к какому имени файла необходимо отобразиться назад.

Так, Вы можете делать это на Win32 с помощью других ответов, но если когда-либо необходимо портировать приложение на среду Unix, Вам не повезет. Мой совет Вам состоит в том, чтобы осуществить рефакторинг Вашу программу, если это возможно, так, чтобы Вам не была нужна ОС, чтобы смочь поддержать открытый ресурс к соединению имени файла.

0
ответ дан Daniel Papasian 16 September 2008 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: