2009-03-03 12 views
2

mon nom Carlos Im du Brésil. Im essayant d'ouvrir un fichier comme celui-ci:Delphi: Ouvrir un fichier à partir d'un autre ordinateur

image1.picture.loadfromfile('\\ntmemo01\c$\ozzy2.bmp'); 

mais cela ne fonctionne pas. Im recevant l'exception

classe EFOpenError avec le message "Impossible d'ouvrir le fichier '\ ntmemo01 \ c $ \ ozzy2.bmp' Accès refusé."

Merci, Carlos

+0

C $ est un contenu masqué êtes-vous sûr que le compte utilisateur a les autorisations correctes? http://support.microsoft.com/kb/314984 – stukelly

Répondre

15

Vous devez utiliser backslashes double. Si vous obtenez toujours l'exception, le fichier est inaccessible à partir de votre application.

La première chose à faire est de s'assurer que vous pouvez accéder au fichier en utilisant l'Explorateur Windows. Il suffit de taper dans la boîte de dialogue Exécuter du menu Démarrer (WinKey + R) et voir ce qui se passe. Si cela ne fonctionne pas, commencez par et commencez par le.

+0

image1.picture.loadfromfile ('\\ ntmemo01 \ c $ \ ozzy2.bmp') ne fonctionne pas aussi. Son retour la même exception – user67348

+0

Ajouté plus à ma réponse. –

+0

En Delphi, je ne pense pas que vous pouvez utiliser double barre oblique inverse \\ pouvez-vous? – Chapel

4

Lorsque vous copiez cette même chaîne dans Windows Explorer, le fichier est-il ouvert? Sinon, il pourrait s'agir d'un problème de droits, comme suggéré par l'erreur.

6

Le lecteur C: sur ntmemo01 est-il partagé? Si ce n'est pas partagé, vous ne pouvez pas y accéder. Si elle est partagée mais nécessite un nom d'utilisateur et un mot de passe, vous devrez y accéder différemment. Vous pouvez mapper une lettre de lecteur à elle, en fournissant un nom d'utilisateur et mot de passe dans le processus:

const 
    RemoteName = '\\ntmemo01\C$'; 
    UserName = 'yourusername'; 
    Password = 'yourpassword'; 

function MapNetworkDrive: Boolean; 
var 
    NetRes: TNetResource; 
    Res: DWord; 
begin 
    Result := True; 
    FillChar(NetRes, SizeOf(TNetResource), 0); 
    NetRes.dwType := RESOURCETYPE_DISK; 
    NetRes.lpRemoteName := PChar(RemoteName); 
    NetRes.lpLocalName := 'H:'; // Whatever drive letter you want 
    Res := WNetAddConnection2(NetRes, PChar(Password), PChar(UserName), 0); 
    Result := (Res = NO_ERROR); 
end; 

Démappage après:

function UnMapNetworkDrive: Boolean; 
var 
    Res: DWord; 
begin 
    Res := WNetCancelConnection2(PChar('H:'), 0, True); // same drive letter as above 
    Result := (Res + NO_ERROR); 
end; 
+0

C $ est un partage administratif caché, mais le mappage d'un lecteur devrait aider. http://support.microsoft.com/kb/314984 – stukelly

+0

Oui, je sais. J'ai un site de reprise après sinistre, nous mettons à jour les fichiers toutes les demi-heures; Je cartographie en C $ sur une machine à 20 miles en utilisant une adresse IP avec le code ci-dessus. Tant qu'il y a un nom d'utilisateur et un mot de passe, cela semble fonctionner correctement. –

5

Comme mentionné par DR, le nom du fichier nécessite backslashes double pour une UNC path

Le message d'accès refusé suggère que vous n'avez pas l'autorisation d'accéder au partage C $ sur l'ordinateur ntmemo01.

C $ a est caché administrative share Etes-vous sûr que le compte d'utilisateur actuel a les bonnes permissions? Vous devez d'abord mapper un lecteur, comme suggéré par Ken White

Les partages d'administration sont désactivés par défaut dans Windows Vista et Windows 7, sauf si vous rejoignez un domaine. Vous pouvez les activer manuellement comme suit.

Cliquez sur le bouton Démarrer et dans la boîte de recherche tapez «regedit» et appuyez sur Entrée.

Naviguez jusqu'à HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System.

Ajouter un nouveau DWORD appelé LocalAccountTokenFilterPolicy et lui donner une valeur de 1 .

Redémarrez et c'est fini!

Source: http://www.paulspoerry.com/2007/05/09/how-to-access-administrative-shares-on-vista-c/

Questions connexes